【发布时间】:2021-12-30 05:20:46
【问题描述】:
我的 React 应用程序中有一个 div,我需要同时处理点击和触摸。但是,当我点击移动设备时,它会触发这两个事件。
如果我在手机上滑动或点击普通浏览器,它可以正常工作,每种情况下只会触发一个事件。
如何处理此点击问题以不触发这两个事件?
<div
className={myClasses}
onClick={this.myHandle}
onTouchStart={this.myHandle}
>
</div>
【问题讨论】:
-
为什么需要 TouchStart 和 click?移动设备和桌面设备都将调用 click。生命周期通常是:touchstart (mousedown) -> touchend (mouseup) -> click。所以除非你需要为 touchstart 做一些明确的事情,否则我会放弃它。
-
我明白你的意思。我之前只有一个,但是,如果用户滑动,它不会触发点击,只会触发触摸事件。这是一种轮播,用户可以点击或滑动“下一张卡片”以滑动。
-
我对这些控件的所有经验都告诉我这些控件不会同时触发??你确定你正确地分析了情况吗? event.preventDefault() 在这里对你有帮助吗?
-
@Shammoo 我的意思是它们是用相同的鼠标动作触发的。当我点击时,两个事件都会被触发,首先是
onTouchStart,然后是onClick。我的句柄this.myHandle改变了状态,所以组件再次渲染。第二个事件(点击)仍然会触发。 -
对于那些在未来发现它的人:这就是它应该做的。
onClick不是“鼠标”事件,它是“点击”事件,相当于触摸设备上的“touchStart-followed-by-touchEnd`。所以在触摸设备上,touchstart触发,调用处理程序,touchend触发,没有处理程序,然后click触发,再次调用处理程序。只需删除onTouchStart,就完成了。
标签: javascript reactjs