jquery 禁用点击保持默认事件,跨设备

lxkprmvk  于 2022-12-12  发布在  jQuery
关注(0)|答案(2)|浏览(157)

我正在努力禁用默认的tap hold浏览器事件。我在谷歌上没有找到任何帮助。我只有Android 4.4.4移动的和Chrome开发工具进行测试。我尝试了CSS修复,如webkit-touch-callout和其他,但显然他们不工作的Android,也不工作的Chrome开发工具。我也尝试检测右键单击,(e.按钮==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);
});

它成功地禁用了默认的点击事件,上下文菜单也不会出现。不过,它也禁用了一些有用的事件,比如滑动。链接在一个垂直菜单中,菜单高于屏幕,所以用户必须滚动它。如果他试图滚动,从一个锚开始,它不会滚动,它会提醒“点击!”
有什么想法,我如何禁用点击默认或我如何修复此代码,使它只禁用点击事件,并保持默认滑动事件启用?
编辑:现在我想设置一个超时,如果指针在同一个地方停留了100 ms,那么就阻止默认操作。在setTimeout回调中不起作用。
所以现在我只是问一个最简单的例子。我能在一定时间过后(当触摸还在的时候)阻止默认操作吗?
这是我在小提琴上的全部问题。http://jsfiddle.net/56Szw/593/这不是我的代码,我从http://www.gianlucaguarini.com/blog/detecting-the-tap-event-on-a-mobile-touch-device-using-javascript/得到的
请注意,上下滑动框时,滚动不起作用。

t5zmwmid

t5zmwmid1#

我得到了解决方案。它是如此简单!我不知道有一个oncontextmenu事件。这解决了一切:

$("body").on("contextmenu", my_selector, function() { return false; });
fcg9iug3

fcg9iug32#

对于<img>,我必须使用event.preventDefault()而不是return false

document.querySelector('img').addEventListener('contextmenu', (event) => {
  event.preventDefault();
}

相关问题