js你真的瞭解offsetWidth嗎

來源:互聯網
上載者:User

標籤:style   blog   color   width   io   re   

offsetWidth是什嗎?

答:它可以擷取物體寬度的數值

 

那麼就只是這樣嗎!

html部分

<div id="div1"></div><style>#div1 { width:200px; height:200px; border:1px solid red; padding:2px; margin:2px; background:green;}</style>

 

請看上面的html,你知道div1的offsetWidth是多少嗎?

是不是200啊

 

哈哈,錯了

div1的offsetWidth是206

 

為什麼?

答:offsetWidth實際擷取的是盒模型(width+border + padding)

200+2+4=206

 

樣本:讓div變窄

現象:onmouseover時,div變窄

 

原理:

oDiv.style.width = oDiv.offsetWidth - 1 + "px";  

 

js部分

 

<script>window.onload = function(){    var oDiv = document.getElementById("div1");        oDiv.onmouseover = function(){        document.title = oDiv.offsetWidth;        setInterval(function(){            oDiv.style.width = oDiv.offsetWidth - 1 + "px";                    },30);    }    }</script>

 

運行上面樣本後,你會發現一個奇怪的現象:

div在變寬

 

我們不是要div變窄的嗎!它怎麼越來越寬了呢?

 

那麼這個問題,怎麼解決呢?

 

解決方式:

用oDiv.style.width = parseInt(oDiv.style.width) - 1 + "px";

 

但是發現,onmouseover時,div它不動呢?

原因:oDiv.style.width,它只能擷取行間的樣式

 

所以需要調整成

<div id="div1" style="width:200px;"></div>

 

其實,我們還可以寫成一個通用的方法,可以擷取任意一個樣式

方法:function getStyle(obj,name)

注意:此時樣式可以不是行間樣式,也能擷取

 

知識點:

IE寫法:currentStyle

非IE寫法: getComputedStyle

 

完整代碼,如下

<div id="div1"></div><style>#div1 { width:200px; height:200px; border:1px solid red; padding:2px; margin:2px; background:green;}</style>

  

<script>window.onload = function(){    var oDiv = document.getElementById("div1");        oDiv.onmouseover = function(){        document.title = oDiv.offsetWidth;        setInterval(function(){            //oDiv.style.width = oDiv.offsetWidth - 1 + "px";            //oDiv.style.width = parseInt(oDiv.style.width) - 1 + "px";                oDiv.style.width = parseInt(getStyle(oDiv,"width"))- 1 + "px";            },30);    }    }//擷取行間任意樣式function getStyle(obj,name){        if(obj.currentStyle){    //IE        return obj.currentStyle[name];    } else {        return getComputedStyle(obj,false)[name];    //非IE    }        }</script>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.