在触摸设备上触发mousedown和mouseup

时间:2017-10-14 15:39:12

标签: javascript events touch mousedown mouseup

mousedownmouseup事件的目的感到好奇,因为它们也会在触控设备上触发。 我认为mousedowntouchstart是相互排斥的(前者在桌面上工作而后者在触摸设备上工作),mouseuptouchend相同,但似乎这样事实并非如此。完整的触摸事件会触发上述所有事件:在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);

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

1 个答案:

答案 0 :(得分:0)

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

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

如果您想了解更多深入信息,请阅读以下文章:Touch and Mouse