【问题标题】:How to feature-detect event.which in mousemove listeners?如何在 mousemove 侦听器中检测 event.which?
【发布时间】:2015-05-02 09:10:41
【问题描述】:

如果在移动事件发生时当前按下鼠标左键,Chrome 似乎在 mousemove 侦听器中有 event.which === 1

但 Firefox 没有;它只在mousedownmouseup 中设置event.which。其他浏览器我不知道。

谁能想出一种对这种行为进行特征检测的好方法?

注意:我知道您可以使用 mousedown 和 mouseup 侦听器来更新 mouseIsPressed 变量,但这在我的情况下不是一个好的 hack(iframed 窗口内的拖动交互,即无法捕捉mouseup 如果它发生在 iframe 之外),所以我想在可用的地方使用本机 event.which

【问题讨论】:

    标签: javascript browser-feature-detection


    【解决方案1】:

    DOM 级别 3 defines MouseEvent#buttons,其中 Firefox supports。来自the MDN article on mousemove

    触发鼠标事件时按下的按钮:左键=1,右键=2,中间(滚轮)按钮=4,第 4 个按钮(通常是“浏览器返回”按钮)=8,第 5 个按钮(通常, “浏览器前进”按钮)=16。如果按下两个或更多按钮,则返回值的逻辑和。例如,如果按下左键和右键,则返回 3 (=1 | 2)。

    【讨论】:

    • 哦,好的,这很好。其他浏览器呢?有没有办法测试任何浏览器,看看它是否支持这个规范?特别是在 mousemove 上的 event.which?问题是我需要提前知道它是否受支持,因为这个问题的答案会影响我在 mousedown 中设置拖动交互的操作。
    • @callum:您可以使用document.createEvent && 'buttons' in document.createEvent('MouseEvent') 检查标准支持。不过,which 不是标准的,您只需要自己测试一下,看看它的覆盖范围是否适合您。
    猜你喜欢
    • 2013-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    相关资源
    最近更新 更多