精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

妞干网在线观看视频| 成人天堂噜噜噜| 美女被到爽高潮视频| 美女网站视频一区| 亚洲精品va在线观看| 精选一区二区三区四区五区| a片在线免费观看| 欧美日韩亚洲一区| 日韩国产精品亚洲а∨天堂免| 亚洲自拍三区| 免费观看黄色av| 视频在线观看一区二区三区| 色偷偷噜噜噜亚洲男人的天堂| 污污视频网站免费观看| 91麻豆免费在线视频| 成人深夜福利app| 国产免费成人av| 成人免费区一区二区三区| 久久在线电影| 亚洲欧美三级在线| 动漫美女无遮挡免费| 巨大黑人极品videos精品| 欧美视频精品一区| 4444在线观看| 三区四区在线视频| 国产亚洲va综合人人澡精品| 高清免费日韩| 国产婷婷一区二区三区久久| 日本vs亚洲vs韩国一区三区| 8x拔播拔播x8国产精品| 国产又粗又猛又爽视频| 粉嫩精品导航导航| 一本一道波多野结衣一区二区 | 国产suv精品一区| 欧美色视频一区| 国产二区视频在线播放| 男女在线观看视频| 亚洲欧美二区三区| 宅男一区二区三区| av一区在线观看| 国产欧美1区2区3区| 成人免费视频网址| 国产一级片一区二区| 亚洲永久视频| 91精品国产777在线观看| 青草草在线视频| 亚洲欧美日韩高清在线| 久久影视电视剧免费网站| 卡一卡二卡三在线观看| 久久av免费| 亚洲码在线观看| 一级黄色片在线免费观看| 国外成人福利视频| 欧美日韩国产一区| 色国产在线视频| 免费视频观看成人| 欧美精品一二三四| 欧美日韩精品区别| 日韩在线视频一区二区三区| 日韩一区二区精品在线观看| xxxxwww一片| 精品人人人人| 精品亚洲精品福利线在观看| 人妻精品久久久久中文字幕| 精品一区电影| 精品国偷自产在线视频| 91在线播放观看| 精品日韩在线| 自拍偷拍亚洲精品| 毛片网站免费观看| 狠狠色狠狠色综合婷婷tag| 国产一区二区免费| www.99re6| 欧美+日本+国产+在线a∨观看| 亚洲欧洲日本专区| 天堂在线中文视频| 小处雏高清一区二区三区| 欧美老少配视频| 日韩成人免费观看| 日本女人一区二区三区| 91免费的视频在线播放| 亚洲乱色熟女一区二区三区| 国产精品一区二区不卡| 国产一区二区三区色淫影院| 欧美理论在线观看| 成人免费一区二区三区在线观看 | 日韩一区av| 国产亚洲一区二区三区四区| 欧美一区二区三区成人久久片| 日本加勒比一区| 国产欧美久久久精品影院| 裸体裸乳免费看| 黄色在线播放网站| 亚洲成a人片在线不卡一二三区| 中国女人做爰视频| 免费成人动漫| 欧美一区二区三区在| 午夜精品免费看| 四虎影视精品永久在线观看| 精品国产三级a在线观看| 女人又爽又黄免费女仆| 欧美96在线丨欧| 国产成人精品免费视频| 99精品久久久久久中文字幕| 久久久久国产精品免费免费搜索| 蜜桃视频日韩| 可以在线观看的av| 亚洲美女精品一区| 那种视频在线观看| 视频成人永久免费视频| 一本色道久久综合狠狠躁篇怎么玩| 少妇毛片一区二区三区| 色综合咪咪久久网| 欧美制服第一页| 性生活黄色大片| 国产精品麻豆网站| 粗暴91大变态调教| 国产乱码精品一区二区三区亚洲人| 日韩一区二区精品| 开心激情五月网| 亚洲一区亚洲| 国产精品亚洲不卡a| 国产婷婷视频在线| 精品视频全国免费看| 国产色视频一区二区三区qq号| 国产精品亚洲人成在99www| 欧美激情在线播放| 亚洲欧美日韩激情| av不卡在线播放| 色狠狠久久av五月综合|| 激情国产在线| 欧美日韩久久久久久| 爱爱免费小视频| 亚洲免费大片| 国产欧美韩日| 91看片在线观看| 91国偷自产一区二区开放时间| 国产精品一区二区小说| 九九热爱视频精品视频| 5566日本婷婷色中文字幕97| 欧美 日韩 国产 在线| 一区二区三区产品免费精品久久75| www.99热这里只有精品| 亚洲一二av| 欧美激情手机在线视频| 国产黄色av片| 亚洲综合免费观看高清在线观看| 爱福利视频一区二区| 欧美亚洲国产日韩| 奇米影视亚洲狠狠色| 婷婷在线免费观看| 高跟丝袜一区二区三区| 亚洲专区区免费| 欧美国产91| 国产精品美乳一区二区免费| 韩国av免费在线| 亚洲超碰97人人做人人爱| 免费观看污网站| 婷婷丁香综合| 1卡2卡3卡精品视频| 午夜影院免费在线| 欧美人体做爰大胆视频| 精品人体无码一区二区三区| 久久se精品一区精品二区| 蜜桃传媒视频第一区入口在线看| 在线观看中文| 精品国产一区二区亚洲人成毛片 | 一区二区视频免费在线观看| 日本女人性视频| 久久亚洲精品中文字幕蜜潮电影| 欧美一级淫片videoshd| 黄色av免费在线看| 欧美日韩国产高清一区二区三区| 18禁裸乳无遮挡啪啪无码免费| 狠狠噜噜久久| 欧美另类一区| 欧美调教sm| 中文字幕久热精品在线视频| 国产绿帽刺激高潮对白| 国产精品色眯眯| 91网址在线观看精品| 欧美高清视频手机在在线| 99理论电影网| 成人看片网站| 欧美大片免费观看在线观看网站推荐| 伊人成人在线观看| 亚洲成av人综合在线观看| 国产sm调教视频| 国产精品一区二区三区四区| 99re在线视频免费观看| 99欧美视频| 精品亚洲欧美日韩| 少妇高潮一区二区三区99| 久久久亚洲国产| 91精品专区| 亚洲精品一区久久久久久| 精品少妇theporn| 国产成人亚洲综合a∨婷婷| 妺妺窝人体色www在线小说| 99久久婷婷这里只有精品| 国产亚洲福利社区| 成人免费91| 欧美国产日产韩国视频| 韩国免费在线视频| 精品少妇一区二区三区在线播放 | 青青草视频在线免费观看| 欧美精品欧美精品系列| 免费看毛片网站| 欧美国产精品一区二区三区| 日本精品一二三区| 久久99最新地址| 国产男女激情视频| 日韩视频在线一区二区三区| 免费成人深夜夜行网站视频| 成人在线丰满少妇av| 麻豆亚洲一区| 加勒比中文字幕精品| 91在线无精精品一区二区| 88xx成人免费观看视频库| 91精品国产乱码久久久久久蜜臀| 天堂在线免费av| 日韩精品在线一区二区| 中文字幕亚洲精品在线| 亚洲精品va在线观看| 国产免费一区二区三区四区| 久久久精品黄色| 一区二区不卡免费视频| 成人av在线看| 亚洲色图欧美另类| 爽好多水快深点欧美视频| 91手机视频在线| 精品视频免费| 日韩免费三级| 国产一区二区三区不卡视频网站| 成人啪啪免费看| 色综合久久久| 欧美亚洲国产日本| caoporn-草棚在线视频最| 欧美激情精品久久久久久变态| 青青草在线免费观看| 日韩精品免费在线视频| 十八禁一区二区三区| 精品婷婷伊人一区三区三| 波多野结衣网站| 欧美性猛交xxxxxx富婆| 久久激情免费视频| 一区二区三区欧美日| a级片在线观看| 久久精品亚洲一区二区三区浴池| av在线免费观看不卡| 国产一本一道久久香蕉| 欧美高清精品一区二区| 国产高清成人在线| av漫画在线观看| 99久久久无码国产精品| 国产传媒第一页| 欧美高清在线精品一区| 国产aaaaaaaaa| 亚洲少妇30p| jizz中文字幕| 国产精品久久久久久久久搜平片 | 日韩在线视频线视频免费网站| 熟妇人妻系列aⅴ无码专区友真希 熟妇人妻av无码一区二区三区 | 97人澡人人添人人爽欧美| 97在线看免费观看视频在线观看| 哥也色在线视频| 欧美疯狂性受xxxxx另类| 9999热视频在线观看| 日本精品一区二区三区在线播放视频| 亚洲第一图区| 久久久91精品国产| 黄网站在线观| 欧美又大又硬又粗bbbbb| 亚洲天堂免费电影| 国产精品视频资源| 日韩视频1区| 久久久久久久久久久久久9999| 亚洲一区二区三区中文字幕在线观看| 国产日韩欧美影视| 在线观看视频一区二区三区 | 性做爰过程免费播放| 欧美天天视频| 女性隐私黄www网站视频| 精品一区二区三区免费观看| 亚洲香蕉中文网| 欧美国产日本视频| 免费在线观看日韩| 日本韩国视频一区二区| 日韩视频在线观看一区| 欧美日韩国产综合视频在线观看| 91麻豆成人精品国产免费网站| 在线亚洲高清视频| 国产男女猛烈无遮挡| 日韩精品视频免费| 国产专区在线播放| 欧美成人免费在线观看| 欲香欲色天天天综合和网| 成人免费福利视频| 亚洲另类av| 成人免费a级片| 奇米在线7777在线精品| 国产一线在线观看| 亚洲天堂成人在线观看| 人妻丰满熟妇av无码区| 欧美电影免费观看完整版| 草碰在线视频| 91av视频在线| 日韩精品视频中文字幕| 日韩精品欧美专区| 激情婷婷久久| 91亚洲一区二区| 亚洲国产成人一区二区三区| 欧美性生交大片| 色综合色综合色综合| 日韩黄色片网站| 亚洲福利视频久久| 可以直接在线观看的av| 97视频色精品| 成人动态视频| 日韩福利二区| 一区二区三区四区五区精品视频| caoporn超碰97| 99久久精品免费看国产免费软件| av男人的天堂av| 欧美视频在线观看 亚洲欧| 亚洲乱码精品久久久久..| 久久精品一区中文字幕| 黄色日韩网站| 无遮挡亚洲一区| 亚洲特色特黄| 欧美人与性动交α欧美精品| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 色一情一乱一乱一区91av| 久久影视免费观看| 成人自拍视频| 黄色高清视频网站| 韩国成人在线视频| 玖玖爱在线精品视频| 亚洲国产精品天堂| 丰满人妻一区二区三区无码av| 亚洲欧洲日产国产网站| 女厕盗摄一区二区三区| 成人情趣片在线观看免费| 香蕉久久网站| 亚洲一级片免费观看| 亚洲人成人一区二区在线观看| 亚洲天堂男人av| 亚洲视频欧美视频| 三上悠亚国产精品一区二区三区| 91精品中国老女人| 亚洲国产精品日韩专区av有中文 | 日本不良网站在线观看| 精品国产乱码久久久久久蜜柚 | 国内精品久久久久影院薰衣草| 中文字幕在线播放视频| 精品久久久久久久久国产字幕| 亚洲手机在线观看| 日韩三级影视基地| 精品国产一级| 日韩中字在线观看| 久久久久久久综合| 一区二区日韩在线观看| 久久在线免费视频| 高清欧美日韩| 久久福利一区二区| av亚洲精华国产精华精华| 无码人妻精品一区二区50| 亚洲国产欧美一区二区丝袜黑人| 国产调教视频在线观看| 国产精品偷伦一区二区| 亚洲欧美综合久久久| 秘密基地免费观看完整版中文 | 日韩影院一区| 国产毛片精品一区| 日韩手机在线观看| 国产亚洲aⅴaaaaaa毛片| 色综合一区二区日本韩国亚洲| 五月天国产一区| 国产精品1区二区.| av黄色在线播放| 亚洲精品一区二区久| 在线高清av| 一区二区三区的久久的视频| 岛国精品一区二区| 日本熟妇一区二区三区| 欧美成人激情在线| 美女网站一区| 午夜免费福利网站| 欧美午夜片欧美片在线观看| 麻豆视频在线观看免费网站| 国产欧美精品久久久| 亚洲精品视频啊美女在线直播| 欧亚乱熟女一区二区在线 | 日韩成人毛片视频| 日韩精品视频在线观看网址| 日韩av黄色| 欧美 激情 在线| 亚洲图片欧美视频| 在线免费观看黄| 国产一区香蕉久久|