js你真的了解offsetWidth吗
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){ //IEreturn obj.currentStyle[name];} else {return getComputedStyle(obj,false)[name]; //非IE }}</script>
轉載于:https://www.cnblogs.com/huaci/p/3863797.html
總結
以上是生活随笔為你收集整理的js你真的了解offsetWidth吗的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hdu 3237
- 下一篇: HDU 4864 Task(2014多校