2014-07-21 69 views
2

如果在移動事件時當前按下鼠標左鍵,Chrome似乎在mousemove偵聽器中有event.which === 1如何在mousemove監聽器中檢測event.which?

但Firefox不;它僅在mousedownmouseup中設置event.which。我不知道其他瀏覽器。

任何人都可以想出一個很好的方法來檢測這種行爲嗎?

注意:我知道你可以使用mousedown和mouseup監聽器來更新mouseIsPressed變量,但這在我的情況下並不是一個好習慣(在iframed窗口中的拖動交互,即無法捕捉mouseup如果它發生在iframe之外),所以我想在可用的地方使用本地event.which

回答

2

DOM等級3 defines MouseEvent#buttons,其中Firefox supports。從the MDN article on mousemove

當鼠標事件被觸發被按壓的按鈕:左鍵= 1,右按鈕= 2,中(車輪)按鈕= 4,第四按鈕(一般地,「瀏覽器返回」按鈕)= 8,第5個按鈕(典型地,「瀏覽器轉發」按鈕)= 16。如果按下兩個或更多按鈕,則返回值的邏輯和。例如,如果按下左按鈕和右按鈕,則返回3(= 1 | 2)。

+0

噢好吧,這很好。那麼其他瀏覽器呢?有沒有辦法測試任何瀏覽器,看它是否支持這個規範?特別event.which移動鼠標?問題是我需要提前知道它是否受支持,因爲答案會影響我在mousedown中設置拖動交互的操作。 – callum

+0

@callum:您可以使用document.createEvent('MouseEvent')'中的'document.createEvent &&'按鈕來檢查標準支持。然而,這不是標準,你只需要自己測試一下,看看它的覆蓋範圍是否可以接受。 – Ryan