【问题标题】:Shouldn't touchmove trigger mousemove automatically?touchmove 不应该自动触发 mousemove 吗?
【发布时间】:2020-10-06 19:34:14
【问题描述】:

Mozilla Developer Network 说:

(...) 即使浏览器支持触摸,浏览器仍然必须模拟 鼠标事件,因此假定仅鼠标输入的内容将按原样工作 无需直接修改。

在我的应用程序中,touchstart 事件触发了mousedown 事件。但是,touchmove 事件不会触发mousemove 事件(我只是在mouseMove 函数的开头添加了一个alert,它从未被调用过)。

我的代码的相关行是:

<html onmousemove='mouseMove(event)' onmouseup='mouseUp(event)'>

<canvas onmousedown='cnvMouseDown(event)'></canvas>

mouseMovemouseUp 函数位于 html 元素上,因此即使光标移出画布,它们也可以工作。这个mouseMove不应该被htmltouchmove事件自动捕获吗?为什么不呢?

【问题讨论】:

  • 这取决于浏览器..您是否在不同的浏览器上尝试过?
  • @Supercool。我的 Android 智能手机上唯一的浏览器是 Chrome。
  • even if a browser supports touch, the browser must still emulate mouse events so content that assumes mouse-only input will work as is without direct modification 这是一个规范,并不意味着每个浏览器都会支持它?想法?

标签: javascript html touch-event mousemove touchmove


【解决方案1】:

MDI-“即使浏览器支持触摸,浏览器仍必须模拟鼠标事件,因此假定只有鼠标输入的内容将按原样工作而无需直接修改”

这意味着如果有支持触摸的浏览器,则必须并建议该浏览器也模拟鼠标事件,这样如果有任何与鼠标事件相关的场景,这些场景就可以工作而无需显式处理它们.

截至 mousemovetouchmove ,它们并不相同。

"特别是,触摸事件总是针对触摸开始的元素,而鼠标事件针对的是当前鼠标光标下的元素。这就是为什么我们有 mouseover 和 mouseout 事件,但是没有相应的 touchover 和 touchout 事件 - 仅 touchend。"

希望对你有帮助

【讨论】:

  • 那么,如果我将代码更改为&lt;canvas onmousedown='cnvMouseDown(event)' onmousemove='mouseMove(event)' onmouseup='mouseUp(event)'&gt;&lt;/canvas&gt;,它应该可以工作吗?因为我做到了,但它仍然不起作用。单击即可激活mouseMove,但我的手指在画布上滑动却没有。
  • 那么,MDN 是在对规范撒谎,还是 Chrome 没有遵循它们?
  • 不,不是那样的。我们不能混合使用鼠标移动和触摸移动。
  • MDN 说我们可以,这是我的问题。
猜你喜欢
  • 2017-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多