Javascript 辨别触摸操作导致的上下文菜单事件?
我有一个应用程序,其中SVG元素中的元素可以拖放(感谢和,请参见此类页面的示例),也可以在支持触摸的设备上使用,但长按后会弹出一个上下文菜单(至少在IE11、Edge和Firefox中是这样),并且会碍事,因此,我想防止上下文菜单在这种情况下显示 我可以通过处理Javascript 辨别触摸操作导致的上下文菜单事件?,javascript,html,touch,contextmenu,dom-events,Javascript,Html,Touch,Contextmenu,Dom Events,我有一个应用程序,其中SVG元素中的元素可以拖放(感谢和,请参见此类页面的示例),也可以在支持触摸的设备上使用,但长按后会弹出一个上下文菜单(至少在IE11、Edge和Firefox中是这样),并且会碍事,因此,我想防止上下文菜单在这种情况下显示 我可以通过处理contextmenu事件并执行.preventDefault()来禁止显示上下文菜单在事件对象上,但我想知道是否存在这样一种解决方案,即在触摸屏中上下文菜单被阻止显示,并且它仍然会显示,例如,右键单击或在元素有焦点时按下 起初我认为我可
contextmenu
事件并执行.preventDefault()来禁止显示上下文菜单
在事件对象上,但我想知道是否存在这样一种解决方案,即在触摸屏中上下文菜单被阻止显示,并且它仍然会显示,例如,右键单击或在元素有焦点时按下
起初我认为我可以查看事件对象的.button
和.button
属性,但这些值似乎是任意的0
或2
,在不同系统的不同浏览器中进行测试时,似乎可以在任意组合中找到
元素已具有触摸操作:无
是否有一些有效的方法使上下文菜单不会因长按而显示?
jQuery UI Touch Punch解决了所有问题 它是对jQueryUI的触摸事件支持。基本上,它只是将触摸事件连接回jQueryUI。在iPad、iPhone、Android和其他支持触摸的移动设备上进行测试。我使用了jQueryUISortable,它工作起来很有魅力
在我的例子中,
d3
已经在为我处理所有的触摸事件,所以我不想要另一个库。我正在寻找一个低级解决方案。如果它能在(所有浏览器/操作系统组合中)工作,那么它可能也能在我的应用程序中工作。我想你可以重新打开触摸操作,并使用touchmove
和touchend
事件来确定是否打开contextMenu。例如:在touchmove
上,您可以设置一个标志,长按应该被忽略。然后在touchend
上,您可以关闭该标志。在contextmenu
事件处理程序中,只需检查标志。这有意义吗?@Potter听起来很有希望,但我必须详细尝试一下,例如,是否存在任何种族条件,例如,contextmenu
事件是否真正只在所有浏览器和平台上的相关触摸事件之后触发。我刚刚了解到,即使在鼠标的情况下,也存在一些差异,在某些系统上,是按下鼠标右键触发上下文菜单,而在其他系统上则是释放,从理论上讲,我可能会与使用敞篷车的用户打交道,因此会把事情搞混,但我想这是一个非常边缘的情况,不值得担心。我开始认为,也许只是阻止所有contextmenu
事件并没有那么糟糕,毕竟,你的普通用户并没有太多地使用它,如果只是在我想我可以再次允许的链接上使用它的话。丢失的是一些功能,例如,在Edge中,您可以右键单击SVG(即使是动态生成的SVG)并下载它,但在我的例子中,它无论如何都会损坏(因为CSS和ext.refs)。