DOM相关:获取样式

420 阅读2分钟

通过.style获取的样式为内联样式,但是如果元素未定义内联样式,而是通过引用外部样式表,样式应通过getComputedStyle()方法和currentStyle属性

getComputedStyle()方法是window的方法,可以直接使用,需要两个参数,第一个参数,要获取样式的元素;第二个参数,可以传递一个伪元素,一般都传null,该方法会返回一个对象,对象中封装了当前元素对应的样式,可以通过对象.样式名来读取样式

而currentStyle属性并不推荐使用,虽然使用很便利,语法为:元素.currentStyle.样式名,因为仅IE8支持,所以不推荐使用

getComputedStyle()方法

var style = getComputedStyle(box,null);

console.log(style.width);

浏览器的返回值即为未定义内联样式的元素的宽度

但是考虑到兼容性,一般会这样写

function getStyle(box,name){

if(window.getComputedStyle){

return (getComputedStyle(box,null)[name]);

}else{

return (box.currentStyle.[name]);

}

}

console.log(getStyle(box,"width"));

之所以在第二行加入window.是因为,如果不加,浏览器在检查时,未识别为方法的情况下,会在变量中寻找getComputedStyle,如果找不到,就会报错,但是如果加window.那么识别为window的一个属性,如果没有,会返回undefined,不会报错

clientWidth和clientHeight属性会获取元素可见的(内容区+内边距)的宽度和高度,只读属性,无法编辑,返回的值为数字,不包含单位

offsetWidth和offsetHeight属性会获取元素的整个的宽度和高度,包括(内容区+内边距+边框)

offsetParent用来获取当前元素的定位父元素,父级元素包含position:relative样式,子元素即可获取其定位父元素

scrollHeight属性显示的为对象的全部高度,包含隐藏在overflow属性下隐藏的部分,scrollWidth同理

scrollTop属性显示的为当前滚动条滚动位置距离父级上边的位置,scrollLeft属性显示的为当前滚动条横向滚动位置距离父级左边的位置

某些网站注册时要求用户必须阅读完全部条款(滚动条滚动到底才可以点击注册,勾选同意条款)其原理为:如果scrollHeight-scrollTop == clientHeight,clientHeight显示的为条款阅读框的高度,不含底部滚动条,仅当用户将滚动条拉到底,scrollHeight-scrollTop == clientHeight,通过调用onscroll事件,滚动即判断,判断通过后,将注册按钮和条款勾选框的disabled属性由disabled修改为false,即可实现效果