JavaScript 獲取鼠標點擊位置座標

在一些DOM操做中咱們常常會跟元素的位置打交道,鼠標交互式一個常常用到的方面,使人失望的是不一樣的瀏覽器下會有不一樣的結果甚至是有的瀏覽器下沒結果,這篇文章就上鼠標點擊位置座標獲取作一些簡單的總結,沒特殊聲明代碼在IE8,FireFox,Chrome下進行測試兼容javascript

 

鼠標點擊位置座標java

相對於屏幕

若是是涉及到鼠標點擊肯定位置相對比較簡單,獲取到鼠標點擊事件後,事件screenX,screenY獲取的是點擊位置相對於屏幕的左邊距與上邊距,不考慮iframe因素,不一樣瀏覽器下表現的還算一致。瀏覽器

function getMousePos(event) {
            var e = event || window.event;
            return {'x':e.screenX,'y':screenY}
        }

 

相對瀏覽器窗口

簡單代碼便可實現,然而這是還不夠,由於絕大多數狀況下咱們但願獲取鼠標點擊位置相對於瀏覽器窗口的座標,event的clientX,clientY屬性分別表示鼠標點擊位置相對於文檔的左邊距,上邊距。因而相似的咱們寫出了這樣的代碼dom

function getMousePos(event) {
            var e = event || window.event;
            return {'x':e.clientX,'y':clientY}
        }

 

相對文檔

簡單測試也沒什麼問題,可是clientX與clientY獲取的是相對於當前屏幕的座標,忽略頁面滾動因素,這在不少條件下頗有用,但當咱們須要考慮頁面滾動,也就是相對於文檔(body元素)的座標時怎麼辦呢?加上滾動的位移就能夠了,下邊咱們試試怎麼計算頁面滾動的位移。ide

其實在Firefox下問題會簡單不少,由於Firefox支持屬性pageX,與pageY屬性,這兩個屬性已經把頁面滾動計算在內了。測試

在Chrome能夠經過document.body.scrollLeft,document.body.scrollTop計算出頁面滾動位移,而在IE下能夠經過document.documentElement.scrollLeft ,document.documentElement.scrollTopspa

複製代碼
function getMousePos(event) {
            var e = event || window.event;
            var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
            var scrollY = document.documentElement.scrollTop || document.body.scrollTop;
            var x = e.pageX || e.clientX + scrollX;
            var y = e.pageY || e.clientY + scrollY;
            //alert('x: ' + x + '\ny: ' + y);
            return { 'x': x, 'y': y };
        }

 

接下來呢,再作一點擴展,沿着上述問題的引入,假如我須要判斷鼠標是否在dom元素#target的上方或者右方呢?code

var target_position = $('#target').offset(); var top = target_position.top;//計算target的top var left = target_position.left;//計算target的left var left_side = left + $('#target').width();//計算target的寬度,這是由於我要判斷的鼠標位置可能位於target的右方,若是是左方,則無需left_side,left就好 var hand_position = getMousePos(e); var y = hand_position.y; var x = hand_position.x; if(top > y || left_side < x){ //此時鼠標位於target的上方或右方 }
相關文章
相關標籤/搜索