我正在努力禁用默认的taphold浏览器事件。我在Google上找到的任何内容都没有提供任何帮助。我只有Android 4.4.4移动版和Chrome开发工具进行测试。我尝试过CSS修补程序,例如webkit-touch-callout和其他人,但显然他们不适用于Android,也不适用于Chrome开发工具。 我也试过检测右键,(e.button == 2),它没有用。
我想出了一个解决方案,但它解决了一个问题并创造了另一个问题。我只想为长按'做一个自定义操作。所选锚点的事件,我不希望出现默认弹出窗口(在新标签页中打开,复制链接地址等) 这就是我所做的:
var timer;
var tap;
$("body").on("touchstart", my_selector, function(e) {
e.preventDefault();
timer = setTimeout(function() {
alert('taphold!');
tap=false;
},500);
});
$("body").on("touchend", my_selector, function() {
if(tap) alert('tap');
else tap=true;
clearTimeout(timer);
});
它成功禁用了默认的taphold事件,并且没有出现上下文菜单。但是它也会禁用有用的事件,例如滑动。链接位于垂直菜单中,菜单高于屏幕,因此用户必须滚动它。如果他试图滚动,从一个锚点开始,它就不会滚动,它会发出提醒!'
任何想法如何禁用taphold默认值或如何修复此代码,以便仅禁用点按事件并启用默认刷卡事件?
编辑:现在我考虑设置超时,如果指针位于相同的位置,让我们说100毫秒,那么就防止默认操作。但是e.preventDefault();不在setTimeout回调中工作。
所以现在我只是询问最简单的例子。我可以在经过一定时间后(触摸仍然存在时)阻止默认操作。
这是我整个小提琴的问题。 http://jsfiddle.net/56Szw/593/ 这不是我的代码,我是从http://www.gianlucaguarini.com/blog/detecting-the-tap-event-on-a-mobile-touch-device-using-javascript/
得到的请注意,在向上和向下滑动框时,滚动功能无效。
答案 0 :(得分:5)
我得到了解决方案。真是太简单了!我不知道有一个oncontextmenu事件。这解决了一切:
$("body").on("contextmenu", my_selector, function() { return false; });