【问题标题】:Handling touch-based events处理基于触摸的事件
【发布时间】:2013-05-09 07:16:40
【问题描述】:

我目前有这个用于我的触摸事件:

if( 'ontouchstart' in document.body) {
    usevkeys = true;
    canvas.addEventListener("touchstart",function(e) {evt.call(this,e);},false);
    canvas.addEventListener("touchend",function(e) {evt.call(this,e);},false);
    canvas.addEventListener("touchmove",function(e) {evt.call(this,e);},false);
}
else {
    canvas.addEventListener("mousemove",function(e) {evt.call(this,e);},false);
    canvas.addEventListener("click",function(e) {evt.call(this,e);},false);
}

这在我的笔记本电脑和手机上运行良好。但是,我想知道,这在同时具有触摸屏和普通鼠标的环境中会有什么反应?鼠标触发触摸事件,像手机触发mousemove事件一样吗?

我可以做些什么来确保它有效?

【问题讨论】:

  • 我不确定它是否有帮助,但 Modernizr 使用 if(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch) {。我想知道这是否有助于缩小范围?当我重新阅读您的问题时,我不确定我是否在回答/帮助任何事情。
  • 如果你摆脱了else {},只留下它,所以mousemoveclick 事件总是被绑定?这样,如果有触摸事件,它们就会被绑定,但普通的鼠标事件总是被绑定。如果他们触摸屏幕,则发生触摸事件,否则发生鼠标事件。还是某些事件重叠?比如touchmovemousemove事件?
  • 我体验到,虽然支持触摸事件,但如果使用 USB 鼠标(可能取决于操作系统),鼠标事件可能会发生(没有触摸事件)。我一直追求:在第一次触发 touchstart 时同时观察并取消设置鼠标事件侦听器...这可以节省不需要的事件侦听器并为您提供控制

标签: javascript touch


【解决方案1】:

touchstarttouchend 触发后立即触发click 事件(-> 如果尚未取消)。所以你应该删除 else 子句就可以了!

Microsoft 在 IE10 中采用不同的方式处理触摸事件,将所有指针设备协调到 Pointer and gesture events 中,您可以在其中检查它是否被鼠标、笔或手指触发 - 或者可能是 kinect 样式的设备未来。

【讨论】:

  • 嗯,这就是我最初尝试的。但问题是,我的手机会触发 mousemove 事件并产生奇怪的结果,导致闪烁并使其无法使用。
  • 尝试在 click/touchstart 函数中附加 mousemove/touchmove 事件。我想打开我的代码,但我不允许,抱歉。
  • 这仍然没有多大用处,因为手机会在第一次点击式触摸时触发click 事件,然后随后的触摸会出现问题。
猜你喜欢
  • 2012-10-26
  • 2010-12-02
  • 2015-02-08
  • 2015-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多