【问题标题】:Touch Screen and Javascript DOM Mousedown Event触摸屏和 Javascript DOM Mousedown 事件
【发布时间】:2014-07-22 16:36:38
【问题描述】:

我有一个使用触摸屏的 javascript web 应用程序,浏览器是基于 webkit 的。

我对此有疑问:

addEventListener("mousedown", function(event){  
    console.log('down fired');
    event.target.classList.add('down');
}, true);

当使用鼠标时,当鼠标按下时,目标元素类会立即添加,但是当使用触摸屏时,当手指放在元素上时,目标元素类不会改变。

然而,奇怪的是,控制台日志消息是在鼠标单击和 ts 按下的 down 事件中发送的。

关于如何解决这个问题的任何建议??

谢谢

编辑

我添加了 touchstart 事件侦听器,但它不会触发触摸事件:

addEventListener("touchstart", function(event){ 
    cl('touch fired');
}, true);

【问题讨论】:

    标签: javascript dom


    【解决方案1】:

    太晚了,但也许其他人可以使用它:

    event.target 在触摸屏上不起作用,因为您可以使用超过 1 根手指,因此目标更多:

    addEventListener("mousedown", function(event){  
      console.log('down fired');
      var t = /touch/.test(event.type) ? event.targetTouches[0] : event.target;
      t.classList.add('down');
    }, true);
    

    【讨论】:

      【解决方案2】:

      改用 touchstart 和 touchend 事件。

      addEventListener("touchstart", function(event){  
          console.log('down fired');
          event.target.classList.add('down');
      }, true);
      

      【讨论】:

        【解决方案3】:

        虽然触摸设备通常会按预期发送鼠标事件,但触摸屏也有特殊事件。具体来说,“touchstart”相当于“mousedown”,“touchend”/“touchcancel”相当于“mouseup”。如果您不检查正在触摸的按钮或位置,通常可以直接替换它们。

        顺便说一句,touchend 意味着用户停止触摸屏幕。 touchcancel 发生在发生拦截触摸的事情(如非浏览器警报)时。

        【讨论】:

        • 谢谢,我添加了触摸事件,但触摸不触发,但问题不在于事件未被识别,它被识别为控制台记录事件,但任何其他操作似乎没有被解雇!
        • 如果console.log 工作,但不是你自己的处理程序,我想知道你的移动设备是否有问题,但它没有向你报告。如果您将您的操作替换为类似 alert('Test'); 之类的简单操作,是否会通过?
        • 您好,谢谢,这不是移动设备,它是运行arch linux 和midori web 浏览器的嵌入式linux。触摸屏硬件是microchip mtouch,没有驱动,被O/S识别为HID鼠标,我想这就是触摸事件无法识别的原因。是否有可能打破mousedown事件?
        • 哈哈...好吧,那是独一无二的。我实际上不知道为什么它会脱离 mousedown 事件。如果其他软件将其视为普通鼠标,它应该可以工作,但不幸的是,您的设置超出了我的知识范围。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多