JavaScript 獲取鼠標點擊坐標五種方式及兼容性

      網友投稿 1966 2022-05-30

      轉自 http://www.poorren.com/javaScript-got-mouse-position/

      JavaScript 獲取鼠標點擊坐標五種方式及兼容性

      關于js鼠標事件綜合各大瀏覽器能獲取到坐標的屬性總共以下五種

      event.clientX/Y

      event.pageX/Y

      event.offsetX/Y

      event.layerX/Y

      event.screenX/Y

      clientX/Y:

      clientX/Y獲取到的是觸發點相對瀏覽器可視區域左上角距離,不隨頁面滾動而改變

      兼容性:所有瀏覽器均支持

      pageX/Y:

      pageX/Y獲取到的是觸發點相對文檔區域左上角距離,會隨著頁面滾動而改變

      兼容性:除IE6/7/8不支持外,其余瀏覽器均支持

      offsetX/Y:

      offsetX/Y獲取到是觸發點相對被觸發dom的左上角距離,不過左上角基準點在不同瀏覽器中有區別,其中在IE中以內容區左上角為基準點不包括邊框,如果觸發點在邊框上會返回負值,而chrome中以邊框左上角為基準點。

      兼容性:IE所有版本,chrome,Safari均完美支持,Firefox不支持

      layerX/Y:

      layerX/Y獲取到的是觸發點相對被觸發dom左上角的距離,數值與offsetX/Y相同,這個變量就是firefox用來替代offsetX/Y的,基準點為邊框左上角,但是有個條件就是,被觸發的dom需要設置為position:relative或者position:absolute,否則會返回相對html文檔區域左上角的距離

      兼容性:IE6/7/8不支持,opera不支持,IE9/10和Chrome、Safari均支持

      screenX/Y:

      screenX/Y獲取到的是觸發點相對顯示器屏幕左上角的距離,不隨頁面滾動而改變

      兼容性:所有瀏覽器均支持

      以上內容收集自網絡

      日常工作中,常用到offsetX,下面提供兩個據說比較靠譜的獲取方案,兼容多瀏覽器,歡迎指正。

      方案一(在使用,獲取的是在當前頁面內的全局坐標,若需要使用相對父級容器的坐標,可以使用jQuery的offset或者原生js等方式獲取元素坐標,進一步計算,鼠標相對元素的相對坐標):

      var getPosition = function(event) { var e = event || window.event; return { x: e.pageX || e.clientX + document.documentElement.scrollLeft || document.body.scrollLeft, y: e.pageY || e.clientY + document.documentElement.scrollTop || document.body.scrollTop }; };

      1

      2

      3

      4

      5

      6

      7

      原生js獲取元素所在坐標,用于計算鼠標在元素內的相對坐標

      var getElPosition = function(el){ var t = el.offsetTop, l = el.offsetLeft; while( el = el.offsetParent){ t += el.offsetTop; l += el.offsetLeft; } return { x : l , y : t }; };

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      方案二(獲取相對父級容器的坐標,但是這個方法在IE11模擬的IE8下好像有點問題,推薦采用第一種方案進行改進):

      var getPosition = function(event){ var evt =event||window.event; var srcObj = evt.target || evt.srcElement; if (evt.offsetX){ return { x:evt.offsetX, y:evt.offsetY }; }else{ var rect = srcObj.getBoundingClientRect(); return { x:evt.clientX - rect.left, y:evt.clientY - rect.top } } };

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      JavaScript 容器

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:ThinkPHP多語言如何實現你了解過嗎?
      下一篇:【Python技能樹共建】lxml 模塊 R2
      相關文章
      久久久久久A亚洲欧洲AV冫| 亚洲免费中文字幕| 亚洲国产精品久久丫| 亚洲日本一区二区三区| 亚洲综合色在线观看亚洲| 国产亚洲欧美在线观看| 亚洲精品无码成人片久久不卡| 国产.亚洲.欧洲在线| 亚洲婷婷第一狠人综合精品| 亚洲一区在线视频| 亚洲国产精品久久人人爱| 亚洲一区二区三区在线| 亚洲1区1区3区4区产品乱码芒果 | 亚洲精品无码专区2| 亚洲A∨精品一区二区三区| 无码欧精品亚洲日韩一区夜夜嗨 | 蜜臀亚洲AV无码精品国产午夜.| 亚洲精华液一二三产区| 亚洲精品自偷自拍无码| 亚洲a无码综合a国产av中文| 日韩亚洲翔田千里在线| 国产亚洲情侣久久精品| 亚洲美日韩Av中文字幕无码久久久妻妇| vvvv99日韩精品亚洲| 国产午夜亚洲精品国产成人小说| 国产偷国产偷亚洲清高动态图| 久久亚洲国产精品一区二区| 久久久久久久久亚洲| 亚洲成人黄色在线观看| 亚洲午夜电影在线观看| 亚洲中文无码卡通动漫野外 | 久久国产精品亚洲一区二区| 久久亚洲精品人成综合网| 亚洲电影在线播放| 亚洲 日韩经典 中文字幕| 精品韩国亚洲av无码不卡区| 亚洲真人日本在线| 久久精品国产亚洲AV麻豆王友容 | 亚洲第一精品电影网| 伊人久久亚洲综合影院首页| heyzo亚洲精品日韩|