我需要知道鼠標光標何時離開div
。所以我連接mouseout
事件。但是,如果我很快將鼠標移出div
,則mouseout
事件不會觸發。沒錯:鼠標光標是坐在div
內部,現在是外部div
,但尚未調用mouseout
回調。 (它可以很好地工作,如果我不移動鼠標的速度非常快)。爲什麼我不能可靠地捕捉鼠標事件?
順便說一句,這是最新Google Chrome - 這不僅僅是一個「舊瀏覽器」問題。
一種解決方法:
關於這個問題的問題一直posed before。顯然這只是一個生活中的事實,我發現的唯一解決方法是手動監視mousemove
事件,每次檢查光標的x/y座標並查看它們是否屬於div
的邊界框,因此您有如果光標不在其中,則有更多機會「注意」。
與讓瀏覽器在本地執行所有操作相比,對每個像素移動執行計算都會帶來一定的性能下降。編碼也很繁瑣。
到我的問題...
爲什麼不能在瀏覽器無法可靠地捕獲mouseout
事件?如果我可以可靠地分辨鼠標何時使用上述解決方法離開div
,爲什麼瀏覽器不能執行此操作?
我明白(從上面鏈接的答案)JavaScript不會嘗試插入「幀」。假設您在document
上放置了一個mousemove
處理程序,並在完美的水平線上快速移動鼠標200個像素到右邊,那麼您可能需要而不是獲取200 mousemove
個事件。少數人會錯過。我沒有這個問題。
但是,如果在鼠標穿越div
的邊界時錯過某些像素移動,爲什麼會彈出mouseout
事件?當瀏覽器終於開始重新註冊鼠標的位置(在突然快速移動之後),即使鼠標現在在框外英里,問題是它以前是而不是。那麼爲什麼它不然後開始鼠標事件呢?
我只是不明白爲什麼這將是瀏覽器供應商解決的難題。 (但我相信可能有一個很好的理由,我太愚蠢的想法。)
我發佈這個問題主要出於好奇,但我希望答案可能會給一些洞察力,可以幫助我更有效地解決問題。此外,任何替代解決方法(比上面提到的更快)將受到歡迎。
這是絕對沒有幫助你(因此評論,而不是答案),但這種行爲最肯定聽起來像一個錯誤。這也可能是顯而易見的,但是爲了解決你的問題「爲什麼會出現鼠標事件應該被跳過?」,答案是他*它不*,因爲它是非故意的行爲。 – jmar777
有趣。這實際上對我很有幫助 - 如果你是對的,那是一個錯誤。對我來說似乎很奇怪,雖然這種錯誤會在Chrome 15中存在!我將製作一個測試頁面,並在其他瀏覽器中嘗試,看看它有多廣泛。我可能會向crbug.com提交一個錯誤報告,看看他們做了些什麼。謝謝。 – callum
僅供參考:Chrome 15尚未進入穩定渠道 – Candide