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
擴展:那么offsetLeft和offsetTop呢
答: offsetLeft = left + marginLeft
offsetTop = top +marginTop
示例:讓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>