【发布时间】:2021-06-10 11:48:34
【问题描述】:
我有一个 react 应用程序,它需要在按住按钮时播放一段内容,然后在释放按钮时停止。
我通过创建一个助手来处理检测长按来实现这一点,当onMouseDown 或onTouchStart 被触发然后它播放,当onMouseUp、onMouseLeave 或onTouchEnd 触发它停止。这一切都在桌面上完美运行。当我们看一下移动设备时,问题就出现了,移动设备将长按视为桌面上的右键单击,并尝试启动上下文菜单或突出显示元素/文本,为了解决这个问题,我添加了以下 css:
touch-action: none;
user-select: none;
-webkit-user-select: none;
-webkit-touch-callout: none;
以及以下 Javascript:
window.oncontextmenu = function (event) {
event.preventDefault();
event.stopPropagation();
return false;
};
这在上下文菜单不显示的意义上按预期工作,但是被按住的按钮确实失去焦点,这意味着内容继续播放并且onMouseUp、onMouseLeave 或onTouchEnd 事件除非您再次点击按钮或屏幕上的某个位置,否则永远不会触发,我已经尝试过解决方案,例如在 onContextMenu 事件期间将焦点重新应用于按钮,但这也不起作用。
【问题讨论】:
-
请试试这个codepen codepen.io/p2pdops/pen/RwpEbxP我不确定这是否能解决问题,但它对我来说可以正常工作(在桌面和安卓模拟器中测试)
标签: javascript css reactjs dom-events