javascript - 在触摸设备上触发 mousedown 和 mouseup

标签 javascript events touch mousedown mouseup

只是好奇 mousedown 的目的和 mouseup事件,因为它们也会在触摸设备上触发。 我以为mousedowntouchstart是互斥的(前者在桌面上工作,而后者在触摸设备上工作)并且对于 mouseup 是相同的和 touchend , 但似乎并非如此。一个完整的触摸事件会触发上述所有事件:在 safari 和 chrome 上测试。因此,为了区分点击(鼠标)事件和点击(触摸)事件,我需要使用某种函数来告诉我这是否是触摸设备:

    function isTouchDevice() {
        return 'ontouchstart' in window        // works on most browsers
            || navigator.maxTouchPoints;       // works on IE10/11 and Surface
    }

    myElem.addEventListener("mousedown", () => {
        if (isTouchDevice()) return;
        // do something
    }, false);

    myElem.addEventListener("mouseup", () => {
        if (isTouchDevice()) return;
        // do something
    }, false);

    myElem.addEventListener("touchstart", () => {
        // do something
    }, false);

    myElem.addEventListener("touchend", () => {
        // do something
    }, false);

我真的需要检查设备是否触摸以区分鼠标点击和触摸点击吗?

最佳答案

不,您不会也不应该尝试测试设备是否为触摸屏。如果您希望停止触发其他事件,可以使用 preventDefault 方法。

myElem.addEventListener("touchstart", (event) => {
   event.preventDefault(); 
   // do something
}, false);

如果您想要更深入的信息,您应该阅读这篇文章:Touch and Mouse

关于javascript - 在触摸设备上触发 mousedown 和 mouseup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46746288/

相关文章:

javascript - JavaScript 中对象的区别

javascript - Angularjs checklist-model - 禁用未选中的框

javascript - 避免浏览器因 onclick 事件重置(原型(prototype))

HTML/CSS : Make a div "invisible" to clicks?

jquery - 使用jquery在touchmove上滚动事件

java - Android onTouchEvent坐标跳转

javascript - 链接元素上的 click() 返回 TypeError ... 为什么?

大型列表上单击事件的 jQuery 委托(delegate)性能 - 如果动态添加更多元素,速度会变慢?

ios - 操纵杆,将控制杆夹在操纵杆底座内

javascript - 显示表格行的函数