js獲取元素寬高、位置相關知識匯總


常見clientWidth、clientHeight、offsetWidth、offsetLeft,clientX、scrollTop等詞語,比較混亂,現在總結下他們的區別。

1. clientWidth:元素的寬度(width+padding),offsetWidth相比clientWidth,多個border的值 ( width+padding+border)。clientHeight 、 offsetHeight略

//某個元素的寬度和高度
var div1 = document.getElementById('div1');
console.log('元素的寬width+padding',        div1.clientWidth );

//body的寬度
console.log('body的寬',document.body.clientWidth);

//可視區的寬度,也就是html的寬度
console.log('可視區的寬', document.documentElement.clientWidth );

//可視區的寬度高度:你可以調整瀏覽器窗口大小調整的,body的高度不設置的話是根據內容來的,內容少,瀏覽器不出現滾動條,body的高度小於可視區高度,內容多,瀏覽器出現滾動條,body的高度大於可視區高度。

但是css3有個屬性:box-sizing

box-sizing: content-box|border-box|inherit

比如,div1設置

1     <style type="text/css">
2         #div1 {
3             width: 200px;
4             height: 200px;
5             padding: 50px;
6             border: 10px solid #000000;
7         }
8     </style>

box-sizing默認是content-box,就是width不包含padding和border的模式,測試,IE7+及其他瀏覽器正常,顯示 clientWidth為50+200+50=300,offsetWidth為10+50+200+50+10=320,多了2邊的border。

IE6下clientWidth為180,offsetWidth為200,因為6下的width是包含padding和border的,但是沒人用ie6了,不細說

但是說明一個問題,clientWidth顯示的很准確,就是實際width+padding的值,ie6下這個值比較小,也顯示小了。

div1加上 box-sizing:border-box;再看看什么反應,IE7不認識 box-sizing:border-box; 出現結果和不加 box-sizing:border-box;一樣,其他瀏覽器都是 clientWidth為180,offsetWidth為200。

結論就是:

1.clientWidth的值挺准確的,去掉邊框的“盒子”占多少像素就顯示多少像素。box-sizing的設置影響到了實際顯示,也自然的影響到了clientWidth的值。

2.offsetWidth就是clientWidth加上兩邊border

3.clientWidth的值可以讀,但是不能寫。例如寫: div1.clientWidth = 500; div1並不會變大,有些瀏覽器報警告或錯誤。

 

 

2. clientX,clientY是事件中的概念, 鼠標點擊時候距離可視區的左側和上側坐標,數據是在事件的細節的event對象中

1         document.onclick = function (ev) {
2             //IE和谷歌用window.event
3             //火狐等用事件函數的第一個參數
4             var ev = ev || window.event;
5             console.log(ev.clientX,ev.clientY);            
6         }

 

3.scrollTop、scrollLeft 是指頁面內容太長,有滾動條了,已經滾動的距離。上面clientX和clientY都是針對可視區的,但是很多時候,我們想知道的是針對頁面內容的距離,才方便我們下一步定位等操作,所以要結合scrollTop、scrollLeft使用

但是,但是,要注意:scrollTop它們存在兼容性問題。

瀏覽器出現滾動條是誰的? 答:只有谷歌瀏覽器認為滾動條是body的(document.body.scrollTop),其他瀏覽器都認為是html的,也就是可視區的(document.documentElement.scrollTop),為了在有限的范圍顯示大頁面,才出現的滾動條。為了兼容,代碼如下:

        
        //有scrollTop和scrollLeft,沒有scrollBottom和scrollRight
        document.onscroll = function(){
            var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
            console.log(scrollTop);
        }
        

 

4. 待續 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM