核心提示:最近老师在讲运动框架,又再次提到了offset家族,又给我重温了一遍以前的知识点。现在接触到了CSDN,就想把它记录下来,让自己印象更深刻一点。offsetWidth与offsetHeight都是符合...
最近老师在讲运动框架,又再次提到了offset家族,又给我重温了一遍以前的知识点。现在接触到了CSDN,就想把它记录下来,让自己印象更深刻一点。
offsetWidth与offsetHeight都是符合现在浏览器的标准盒模型的,所以用它获取元素的宽度和高度时,它会将元素的border、padding以及内容计算进去。
可有时候我们只想操作内容区,不包括border。这时使用offsetWidth或者offsetHeight来获取元素的宽和高就有问题了。
这时,我们有了另一种解决方法,那就是使用currentStyle与getComputedStyle结合使用来获取css属性值。具体的封装写法如下:
function getStyle(obj, attr){ if(window.getComputedStyle){ return window.getComputedStyle(obj, false)[attr]; }else{ return obj.currentStyle[attr]; } }
将它封装成函数,以后要再获取元素的属性值时就可以直接调用了,非常方便。
但是呢,在IE下,如果没有声明某个属性值,用该函数来获取时,会出现一些意想不到的事情。
比如,用该函数来获取背景颜色时会返回undefined,获取高度和宽度都会返回auto,获取字体大小会返回12pt,以上获取都是未在css里声明属性值,并且是在IE9以下浏览器下获取时发生的。
iE9及9以上获取宽度、高度、字体大小时会返回默认值(实际测试中发现字体大小返回的是15.99px),获取某些值时会返回空,获取某些值时会返回auto,某些会返回默认值。
所以,在使用该函数时,若要兼容IE,最好把要获取的元素的初始值在css里面写一遍,否则出现了莫名其妙的bug,找了半天才发现是没有初始化的话,那就太浪费时间了。