当用户在功能性反应组件中使用触摸屏时,用按钮隐藏 div

Posted

技术标签:

【中文标题】当用户在功能性反应组件中使用触摸屏时,用按钮隐藏 div【英文标题】:Hide div with buttons when user uses a touch screen in a functional react component 【发布时间】:2021-01-29 00:35:48 【问题描述】:

当用户使用触摸屏时,我想隐藏一个 div。是一个 react js 功能组件。

我要隐藏的 div 如下所示:

    <div className="scrollButtons">
                    <button
                        className=count <= 0 ? 'buttonLeftOpacity' : 'buttonLeft'
                        type="button"
                        onMouseDown=() => clickHandlerLeft()
                    >
                        '<'
                    </button>
                    <button className="buttonRight" type="button" onMouseDown=() => clickHandlerRight()>
                        '>'
                    </button>
                </div>
            </>

我用来感知用户是否在触摸屏上的代码是这样的:

    window.addEventListener('touchstart', function userTouch() 
        console.log(userTouch());
    );

当用户使用触摸屏时,如何使用该代码隐藏 div? 提前谢谢!

【问题讨论】:

【参考方案1】:

创建一个不会显示的类

.example 
display:none; 

然后添加这个

 window.addEventListener('touchstart', function userTouch() 
  var element = document.getElementById("scrollbuttons"); // selecting the element you want to edit, make sure to add the ID to the button if you are using this method. 
  element.classList.add("example"); //add invisible className
);

【讨论】:

嗨!感谢您的回答。我喜欢它,实际上我之前也尝试过类似的东西——而且它有效——但我不认为这感觉像是一种 React 方式。如果我只使用 javascript,可能会更多。我发布并回答了我如何用状态解决它。 没问题,什么都适合你。我很高兴你能找到几种方法来解决这个问题。继续将您的答案标记为解决方案,您能否给我的答案投票? 由于某种原因,直到明天我才能将我的答案标记为解决方案,但是您收到了赞成票!再次感谢! ✌?【参考方案2】:

所以,这就是我解决它的方法。通过使用 react 中的“useState”,我将 show 默认设置为 true,如果用户在触摸屏上,则设置为 false。然后,我使用该状态来显示或隐藏 touchbuttons-div,无论该值是否为真。

const [show, setShow] = useState(true);

    window.addEventListener('touchstart', function userTouch() 
        setShow(false);
    )

show ? (
                <>
                    <div className="scrollButtons" id="scrollButtons">
                        <button
                            className=count <= 0 ? 'buttonLeftOpacity' : 'buttonLeft'
                            type="button"
                            onMouseDown=() => clickHandlerLeft()
                        >
                            '<'
                        </button>
                        <button className="buttonRight" type="button" onMouseDown=() => clickHandlerRight()>
                            '>'
                        </button>
                    </div>
                </>
            ) : (
                <></>
            )

【讨论】:

以上是关于当用户在功能性反应组件中使用触摸屏时,用按钮隐藏 div的主要内容,如果未能解决你的问题,请参考以下文章

反应切换功能

如何在点击时重新加载反应原生地图

按钮 onClick 在反应组件中仅工作一次

当用户滑动并点击手指(使用触摸手势)时如何隐藏所有 CollectionViewCell?

仅当登录用户在反应中有 ADMIN 权限时才显示删除按钮

反应父母对孩子道具传递而不重新渲染