用 JS 計算鼠標在頁面上的位置并非難事, 只要把握好各瀏覽器的區(qū)別就可以輕易算出鼠標位置. (這是 DEMO)
視窗 (瀏覽器可視窗口) 就像是頁面上的掩板開了一個洞. 滾動條可以改變頁面和視窗之間的偏移量, 從而可以通過視窗看到頁面的各個位置.
鼠標在頁面上的位置 = 頁面和視窗之間的偏移量 + 鼠標在視窗中的位置
右圖中的 cursorX 和 cursorY 分別是鼠標在視窗中的橫向和縱向位置, scrollY 是頁面和視窗之間的縱向距離. 當然, 當視窗寬度小于頁面寬度的時候, 還會存在 scrollX. 那么鼠標在頁面上的位置就是: (scrollX+cursorX, scrollY+cursorY)
IE 以外的瀏覽器 (本人測試過 Firefox 3.6, Opera 10.10, Chrome 4.1 和 Safari 4.0.4) 均可以通過 pageXOffset 和 pageYOffset 來獲取頁面和視窗間的橫縱距離. 但 IE (本人測試過 IE6, IE7, IE8) 只能通過滾動位移來獲取頁面和視窗間的距離, 并存在一到兩個像素的偏離.
以下是獲取鼠標在頁面上位置的代碼實現(xiàn). (這是 DEMO)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
/** * 獲取鼠標在頁面上的位置 * @param ev 觸發(fā)的事件 * @return x:鼠標在頁面上的橫向位置, y:鼠標在頁面上的縱向位置 */ function getMousePoint(ev) { // 定義鼠標在視窗中的位置 var point = { x:0, y:0 }; // 如果瀏覽器支持 pageYOffset, 通過 pageXOffset 和 pageYOffset 獲取頁面和視窗之間的距離 if(typeof window.pageYOffset != 'undefined') { point.x = window.pageXOffset; point.y = window.pageYOffset; } // 如果瀏覽器支持 compatMode, 并且指定了 DOCTYPE, 通過 documentElement 獲取滾動距離作為頁面和視窗間的距離 // IE 中, 當頁面指定 DOCTYPE, compatMode 的值是 CSS1Compat, 否則 compatMode 的值是 BackCompat else if(typeof document.compatMode != 'undefined' && document.compatMode != 'BackCompat') { point.x = document.documentElement.scrollLeft; point.y = document.documentElement.scrollTop; } // 如果瀏覽器支持 document.body, 可以通過 document.body 來獲取滾動高度 else if(typeof document.body != 'undefined') { point.x = document.body.scrollLeft; point.y = document.body.scrollTop; } // 加上鼠標在視窗中的位置 point.x += ev.clientX; point.y += ev.clientY; // 返回鼠標在視窗中的位置 return point; } |
該文章在 2010/8/14 2:14:58 編輯過