精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

技術分享 如何獲取Dom元素的X/Y坐標

開發 前端
本文和大家一起學習一下如何獲取Dom元素的X/Y坐標,當今已有很多的JS框架封裝了獲取Dom元素的坐標的方法,我們可以直接使用。

當今已有很多的JS框架封裝了獲取Dom元素的坐標的方法,我們可以直接使用,而這里我更多的是希望透過這些方法,看到原始的獲取坐標方式以及如何處理跨瀏覽器問題。

獲取Dom元素的X/Y坐標

現在Web頁面的交互方式越來越多樣化,其中拖放頁面元素也是一種很常見的操作。在這類操作當中有兩個主要問題需要解決,一個是事件的注冊方式,一般處理拖放元素的事件順序是:捕獲鼠標正鍵按下——注冊鼠標移動事件——捕獲鼠標正鍵抬起——注銷鼠標移動事件;另一個問題就是拖放元素的位置,即X/Y坐標。這里我主要來講述后面的問題:如何獲取一個Dom元素的坐標。

當今已有很多的JS框架封裝了獲取Dom元素的坐標的方法,我們可以直接使用,而這里我更多的是希望透過這些方法,看到原始的獲取坐標方式以及如何處理跨瀏覽器問題。

首先認識一下getBoundingClientRect方法,標準語法為:

  1. oRect=object.getBoundingClientRect();  
  2.  

Dom節點調用該方法可返回一個ClientRect類型的對象,該對象有四個屬性值:top、left、right、bottom,表示了該節點相對于可視瀏覽器可視區域的左上角位置的坐標,看圖就能好理解:

坐標說明圖1

DOM元素坐標說明圖1

補充一下,如果當前的元素已經超出可視區域,依然按照可視區域的左上角位置的坐標來計算,如圖2

坐標說明圖2

DOM元素坐標說明圖2

這樣就可以簡單的獲取Dom元素在可視區里的X/Y坐標(通過left和top屬性)。最后在計算上頁面滾動條的偏移量就可以計算出元素在整個頁面中的X/Y坐標了。頁面滾動偏移量的計算在不同瀏覽器下有所不同,不過我們可以借鑒YUI里面方法,設計一個通用的方式:

  1. scrollLeft=Math.max(document.documentElement.scrollLeft,  
  2.  
  3. document.body.scrollLeft);  
  4.  
  5. scrollTop=Math.max(document.documentElement.scrollTop,  
  6.  
  7. document.body.scrollTop);  

在W3C標準下document.body.scrollTop和document.body.scrollLeft都為0,所以采用了上面兼容的方式獲取頁面滾動條的偏移量。#p#

◆將ClientRect對象的left、top屬性分別加上scrollLeft和scrollTop,就能獲取Dom元素的X/Y坐標了。但對于IE8之前的IE版本在很多情況,下面要對這個值進行一些調整,有三種情況,下面來分別看一下:

1.IE6的標準模式下不需要調整;

2.所有怪異模式下為取document的當前borderLeftWidth和borderTopWidth值做調整,分別加在X/Y坐標值上;

3.其他的情況都分別在X/Y坐標值上加上2;

這樣就可以獲取最后準確的X/Y坐標了。

如果所有的瀏覽器都能如此就好了,可惜有些瀏覽器(FF2、Safari)不支持getBoundingClientRect方法。需要通過一級級查找和計算offsetParent來獲取X/Y坐標值。這里首先介紹什么是元素的offsetParent屬性。

◆offsetParent屬性是距離調用offsetParent的元素最近的(在包含層次中最靠近的),并且是已進行過CSS定位的與容器元素。首先說明一下CSS定位,是指對元素設置position屬性為absolute、relative或fixed(IE6除外),還有一個問題是元素在table元素中時會有不同的情況。下面是我的一些歸納,不全之處望大家指出:

1.元素不在table元素中,且元素及其所有上級元素都未進行CSS定位時,這個元素的offsetParent屬性為根元素(Body);

2.元素本身沒進行CSS定位,而出現在table中或有上級元素進行了CSS定位,那么當向上先達到TD元素時該元素的offsetParent屬性為TD元素;當向上先達到進行了CSS定位的上級元素時該元素的offsetParent屬性為該上級元素;

3.無論元素在不在table中,只要元素本身進行了CSS定位,有上級元素進行了CSS定位的則元素的offsetParent屬性為該上級元素,沒有上級素進行了CSS定位的則元素的offsetParent屬性為根元素;

知道了offsetParent屬性的含義,就可以通過offsetParent屬性來一級級的計算X/Y坐標了。一種比較簡單的while循環:

  1. varnode;/*求坐標的元素*/  
  2. varxy=[];/*保存XY坐標*/  
  3. while((nodenode=node.offsetParent)){  
  4. xy[0]+=node.offsetLeft;  
  5. xy[1]+=node.offsetTop];  

◆通過這一個循環就能累計元素每級offsetParent屬性元素的偏移量,但這個偏移量在累加的過程中沒有計算每級父元素有滾動條的情況,最后還要同getBoundingClientRect方法一樣加上頁面滾動值(這里scrollLeft和scrollTop)?,F在先來累計計算元素每上級元素的滾動條情況,首先判斷元素本身是不是設置了position為fixed:

1.設置了則不用計算每上級元素的滾動條情況,但需要對Opera和其他瀏覽器做區分,Opera瀏覽器減去scrollLeft和scrollTopxy[0]-=scrollLeft;xy[1]-=scrollTop;,其他情況是加上scrollLeft和scrollTop。

  1. xy[0]+=scrollLeft;xy[1]+=scrollTop;  
  2.  

2.未設置時就需要累計計算元素每上級元素的滾動條,通過一個循環里累加:

  1. while((nodenode=node.parentNode)&&node.tagName){  
  2. scrollTop=node.scrollTop;  
  3. scrollLeft=node.scrllLeft;  
  4. if(scrollTop||scrollLeft){  
  5. xy[0]-=scrollLeft;  
  6. xy[1]-=scrollTop;  
  7. }  

最后機上頁面滾動值

  1. xy[0]+=scrollLeft;xy[1]+=scrollTop;  
  2.  

這樣最后就可以在不支持getBoundingClientRect方法的瀏覽器下獲取元素的X/Y坐標了。

總結:

如果瀏覽器支持getBoundingClientRect方法,通過該方法再加上頁面滾動條的偏移就能獲取元素的X/Y了(不同瀏覽器需要微調),如果不支持getBoundingClientRect方法,則需要通過循環該元素的每級offsetParent屬性來累計偏移量,再通過每個父級元素的滾動條來調整,最后再加上頁面滾動條的偏移來獲取元素的X/Y坐標。獲取X/Y坐標的方式還有很多,可能不盡相同,我這里主要是基于YUI里面的思想和方法。
 

【編輯推薦】

  1. JQuery創建DOM元素方法解析
  2. W3C DOM模型用法詳解
  3. JavaScript獲取HTML DOM節點元素詳解
  4. 深入了解JavaScript HTML DOM對象
  5. 解析HTML DOM Checkbox對象的屬性和方法

 

 

責任編輯:佚名 來源: ued.koubei.com
相關推薦

2010-09-13 16:46:29

JavaScriptHTML DOM節點

2021-04-09 18:01:03

前端ReactDOM

2010-10-09 10:56:50

DHTMLJS

2010-10-09 13:56:33

textareaJavascript

2024-01-15 09:23:16

框架方式原生

2023-10-30 08:35:50

水波紋效果vue

2010-09-28 13:40:52

DOM元素

2010-08-11 14:47:54

Flex樣式

2010-06-02 16:09:05

SVN協議

2010-07-15 15:21:07

Perl線程

2010-07-28 12:41:18

Flex組件

2010-09-25 16:06:58

SQL語句

2010-09-28 15:27:09

JavaScript

2013-01-09 15:27:45

DOM XSS檢測QtWebKitXSS

2021-01-11 07:51:16

DOM對象節點樹

2010-09-10 13:06:27

JavaScript

2013-04-12 12:36:13

WindowsPhon

2010-05-26 15:39:36

SVN服務

2010-06-01 18:49:19

刪除SVN備份

2013-08-06 15:16:27

技術人創業開發者創業移動互聯網創業
點贊
收藏

51CTO技術棧公眾號

中文字幕无码精品亚洲资源网久久| 日韩男女性生活视频| 黑人巨大猛交丰满少妇| 国产高清视频色在线www| 91社区在线播放| 国产精品丝袜视频| 久久久久性色av无码一区二区| 老司机aⅴ在线精品导航| 欧美午夜精品免费| 国产一线二线三线女| 浮生影视网在线观看免费| 国产精品影视在线| 国产成人精品在线| 久久久久久欧美精品se一二三四| 国产精品日韩精品中文字幕| 日韩一卡二卡三卡四卡| av无码精品一区二区三区| 女人黄色免费在线观看| 国产精品伦一区| 国内一区二区在线视频观看| 国产精品久久久久久69| 美女精品在线| 国外成人免费在线播放| 永久免费未视频| 亚洲ab电影| 精品久久一区二区三区| 一级做a免费视频| 综合毛片免费视频| 一区2区3区在线看| 制服国产精品| 国产免费av高清在线| av综合在线播放| 91国产在线播放| 影音先锋国产在线| 久久国产日韩| 97人人模人人爽人人喊中文字 | 久久精品一区蜜桃臀影院| 懂色一区二区三区av片| 国产美女免费看| 日本不卡高清视频| 国产成人在线视频| 69国产精品视频免费观看| 黄色成人在线网址| 欧美成人高清视频| 动漫性做爰视频| 亚洲色图国产| 精品国内产的精品视频在线观看| xxx在线播放| 综合综合综合综合综合网| 亚洲国产成人精品一区二区| 国产精品日日摸夜夜爽| 亚洲欧美日本国产| 欧美成va人片在线观看| 免费人成视频在线播放| 亚洲欧洲一二区| 欧美一区二区在线看| 国产美女视频免费看| 日韩午夜电影免费看| 欧美日本在线看| 欧美一级小视频| 日韩激情综合| 日韩欧美一区在线| 欧美久久久久久久久久久| 97久久综合精品久久久综合| 精品精品欲导航| 中文字幕在线播放视频| 免费国产自久久久久三四区久久| 亚洲欧美国产精品久久久久久久| 中文幕无线码中文字蜜桃| 欧美女优在线视频| 在线视频亚洲欧美| 精品无码一区二区三区蜜臀| 欧美三级网页| 5278欧美一区二区三区| 99久久久久久久久| 精品一区二区三区免费| 超碰在线97av| 日韩一级片免费在线观看| 91理论电影在线观看| 午夜精品视频在线观看一区二区| 男人在线资源站| 一区二区三区免费在线观看| 黄色激情在线视频| 三上悠亚国产精品一区二区三区| 欧美三级日本三级少妇99| 五月天婷婷影视| 国产精品极品| 中文字幕视频一区二区在线有码 | 成人3d精品动漫精品一二三| www国产91| 久久久全国免费视频| 亚洲免费中文| 国产精品一区二区久久| 精品国产区一区二| 久久综合九色综合97婷婷| 中文字幕久精品免| 9999精品成人免费毛片在线看| 一本色道亚洲精品aⅴ| 男生操女生视频在线观看| 岛国成人av| 中文字幕亚洲一区二区三区| 久久精品久久国产| 久久精品国产秦先生| 国产高清一区二区三区| 国产精品久久久久一区二区国产 | 亚洲国产精品传媒在线观看| 亚洲一区二区三区免费观看| 国产在线xxx| 欧美日韩在线观看一区二区| 中文字幕天堂av| 欧洲grand老妇人| 国自产精品手机在线观看视频| 波多野结衣家庭主妇| 粉嫩av一区二区三区粉嫩| 日本一区二区三区在线视频| 黄页网站在线| 欧美军同video69gay| 久久精品一区二区免费播放 | 亚洲人成无码网站久久99热国产 | 欧美三区免费完整视频在线观看| 亚洲av熟女高潮一区二区| 99久久夜色精品国产亚洲96| 欧美中文在线字幕| 亚洲成熟女性毛茸茸| 中文字幕在线观看不卡视频| 动漫av免费观看| 国产精品白浆| 欧美另类99xxxxx| 一区二区视频免费| 久久欧美中文字幕| 怡红院av亚洲一区二区三区h| 国产精品久久免费视频| www欧美日韩| 中文人妻熟女乱又乱精品| www国产成人免费观看视频 深夜成人网| 国产 国语对白 露脸| **国产精品| 中文字幕亚洲字幕| 中文字幕精品一区二区精| 久久你懂得1024| 漂亮人妻被中出中文字幕| 久久亚州av| 国内精品久久久| 性做久久久久久久久久| 亚洲精品欧美二区三区中文字幕| 好男人www社区| 精品国产91久久久久久浪潮蜜月| 日韩av片免费在线观看| 日本不卡视频一区二区| 色综合天天做天天爱| 免费看污黄网站在线观看| 国产精品毛片在线看| 免费在线观看91| 成人免费网站视频| 亚洲天堂网在线观看| 久草视频在线免费| 国产亚洲欧洲一区高清在线观看| 日本中文字幕网址| 网友自拍一区| 国产精品久久久久久久av电影| 黄色影院在线播放| 欧美日韩精品一区二区在线播放 | 一区二区视频在线| www.四虎精品| 夜夜嗨网站十八久久| 久久青青草综合| 亚洲mmav| 按摩亚洲人久久| 超碰免费在线97| 五月激情综合色| 国产女主播喷水高潮网红在线| 另类av一区二区| 亚洲福利av| 另类视频一区二区三区| 91国产美女视频| 国产经典自拍视频在线观看| 欧美人妇做爰xxxⅹ性高电影| 中文字幕在线2021| 99精品久久只有精品| 精品999在线| 亚洲无吗在线| 神马影院一区二区三区| 国产精品视频首页| 91av视频在线免费观看| www 日韩| 亚洲丁香婷深爱综合| 樱花视频在线免费观看| 亚洲精品一二三| 波多野结衣福利| 国模娜娜一区二区三区| 欧美日韩精品在线一区二区| 区一区二视频| 国产精品久久久久免费| av一区在线播放| 欧美激情中文字幕乱码免费| 青青久草在线| 日韩一级在线观看| 国产精品成人无码| 亚洲成a天堂v人片| 又嫩又硬又黄又爽的视频| 国产jizzjizz一区二区| 五月婷婷激情久久| 国产欧美亚洲一区| 手机在线视频你懂的| 亚洲精品国产精品粉嫩| 91色在线视频| 欧美日韩成人影院| 久久久久九九九九| 欧美成人高清在线| 亚洲免费av网址| 亚洲精品国产suv一区| 欧美日韩一区二区欧美激情 | 欧美日韩一区 二区 三区 久久精品| 久久高清无码视频| 综合久久久久久久| 国产人妻大战黑人20p| 成人免费va视频| 两性午夜免费视频| 久久99精品一区二区三区| 欧美在线观看成人| 亚洲激情在线| 91大学生片黄在线观看| 欧美大人香蕉在线| 欧美日韩精品免费观看| 乱亲女h秽乱长久久久| 成人午夜在线观看| 久久黄色片网站| 亚洲图片小说区| 国产精品久久9| 黄色成人在线网| 久久成人18免费网站| 中文日本在线观看| 一区二区三区美女xx视频| 三级视频在线播放| 亚洲激情视频在线观看| 人妻视频一区二区三区| 日韩欧美国产wwwww| 99re只有精品| 欧美一区日韩一区| 精品国产乱码一区二区三 | 成年人网站大全| 亚洲一区自拍| 日本久久久精品视频| 亚洲欧美激情诱惑| 日韩欧美中文字幕一区二区三区| 欧美一区二区视频在线观看2020| 最近中文字幕av| 天堂美国久久| 欧美成熟毛茸茸复古| 国产96在线亚洲| 国产精品v欧美精品∨日韩| 在线视频亚洲欧美中文| 99久久自偷自偷国产精品不卡| 国产免费区一区二区三视频免费| 91精品视频网站| 日本一区影院| 国产富婆一区二区三区 | 亚洲va欧美va国产综合久久| 91成人小视频| 99国产高清| 波多野结衣办公室33分钟| av网站一区二区三区| 亚洲精品在线视频免费观看| 91亚洲精品一区二区乱码| 亚洲激情在线激情| 91九色蝌蚪porny| 99久久精品免费看国产免费软件| 久久久久国产精品区片区无码| www一区二区| 日本午夜精品视频| 亚洲免费色视频| 日韩高清免费av| 91极品视觉盛宴| 国产精品人妻一区二区三区| 精品蜜桃在线看| 色天堂在线视频| 中文字幕在线国产精品| gogo在线观看| 97久久国产精品| 国产69精品久久久久按摩| 91色在线观看| 婷婷激情久久| 中文字幕一区二区三区有限公司| 亚洲图片在线| www.超碰com| 国产91精品精华液一区二区三区| 狠狠人妻久久久久久综合蜜桃| 国产精品区一区二区三区| 久久国产精品二区| 在线观看一区二区精品视频| 国产男男gay网站| 亚洲精品一区中文| 激情影院在线观看| 欧美最顶级的aⅴ艳星| 日韩综合av| 老牛影视免费一区二区| 欧美91视频| 婷婷激情四射五月天| 成人精品视频一区| 日本 欧美 国产| 高跟丝袜欧美一区| 国产视频www| 亚洲色图美腿丝袜| 蜜乳av一区| 国产日韩欧美91| 亚洲精品白浆高清| 妞干网在线播放| 久热成人在线视频| 一本加勒比北条麻妃| 一级女性全黄久久生活片免费| 成人毛片一区二区三区| 精品久久久久久无| 黄网址在线观看| 国产精品jvid在线观看蜜臀| 999在线精品| 老汉色影院首页| 美女精品自拍一二三四| 手机av免费看| 亚洲成人av一区二区| 国产xxxx孕妇| 色青青草原桃花久久综合| 成人性生交大片免费网站| 国产精品免费一区二区三区四区 | 影音先锋男人的网站| 秋霞午夜鲁丝一区二区老狼| 成人无码www在线看免费| 亚洲一区二区三区四区中文字幕| 国产精品亚洲欧美在线播放| 夜夜嗨av色一区二区不卡| 韩国主播福利视频一区二区三区| 国产精品一区视频| 伊人天天综合| 久久国产免费视频| 亚洲女同一区二区| 国产99视频在线| 久久亚洲精品成人| 99综合久久| 性欧美18一19内谢| 久久机这里只有精品| 国产日产精品一区二区三区的介绍| 欧美色图在线观看| 欧美激情二区| 成人性教育视频在线观看| 亚洲成人免费| 国产精品熟女一区二区不卡| 亚洲欧美日韩国产手机在线 | 色吧亚洲视频| 日韩国产在线观看| 97人妻人人揉人人躁人人| 日本韩国欧美一区二区三区| 国产爆初菊在线观看免费视频网站| 日本一欧美一欧美一亚洲视频| 妖精视频一区二区三区免费观看| 国产二区视频在线播放| 久久久不卡网国产精品一区| 99久久久无码国产精品免费蜜柚 | 亚洲区免费视频| 欧美性色综合网| 免费黄色在线看| 91传媒视频在线观看| 亚洲精品影视| 性生交大片免费看l| 高潮无码精品色欲av午夜福利| 亚洲国产精品人人爽夜夜爽| 超碰中文在线| 久久精品日产第一区二区三区精品版| 亚洲三级影院| 深爱五月激情网| 欧美丝袜丝交足nylons| 黄色网页在线看| 国产精品亚洲不卡a| 性xx色xx综合久久久xx| 人人人妻人人澡人人爽欧美一区| 欧美日韩在线一区二区| 18网站在线观看| 久久手机视频| 久久黄色级2电影| 久一视频在线观看| 亚洲免费影视第一页| 黑人一区二区三区| 国产在线视频综合| 久久婷婷国产综合国色天香| 在线观看色网站| 欧美国产在线电影| 神马影视一区二区| 久久精品无码一区二区三区毛片| 午夜精品免费在线| 幼a在线观看| 国产精品永久入口久久久| 丝袜美腿亚洲色图| 玖玖爱免费视频| 亚洲网址你懂得| 亚洲网一区二区三区| 国产欧美高清在线| 亚洲欧美日韩系列| 日本中文字幕一区二区有码在线| 成人免费xxxxx在线观看| 亚洲少妇在线| 国产高潮流白浆| 亚洲欧美国产日韩天堂区|