前兩天自己自己做的一個小demo出了bug,找了好久也沒發現出在哪裡。
demo代碼目的是得到鼠標"實時"在頁面的的clientX與clientY,
我用的是:document.onmouseover = function (){
/*代碼區*/
};
解決問題後我用的是:document.onmousemove = function (){
/*代碼區*/
};
以下是onmouseover與onmousemove的區別:
onmouseover 鼠標指針在該元素的上面就觸發
onmousemove 除了剛進入區域觸發外,鼠標指針在該元素的上面移動也會觸發
很顯然,“物體A在物體B的上面”跟“物體A在物體B的上面移動”是兩種完全不同的狀態(或者說概念),前者不管怎麼變化,只要物體A仍然在物體B的上面,這個狀態就不會改變的,而後者就不同了,每一次移動都會造成坐標的改變,就是說每次移動都會造成狀態改變的。
總結以上:onmouseover只觸發一次(只要鼠標移動到元素上面就觸發);onmousemove會不斷觸發(只要鼠標在元素上面並且移動了鼠標就觸發)。
一般情況下只需用onmouseover即可,特殊情況才用onmousemove(因為這個比較耗資源),比如需要監控鼠標坐標的變化。
順便提一下: onmouseup,onmousedown,onclick,
時間上 onmouseup 事件觸發後,再觸發 onclick 事件。
動作上 onmouseup 側重於檢測鼠標彈起,而 onclick 檢測鼠標按下並彈起,onmousedown 側重於檢測鼠標按下。