js学习(十三)-- 使用DOM操作CSS


CSS设置参考手册(https://www.w3school.com.cn/cssref/index.asp)

1.操作内联样式

语法

元素.style.样式名 = 样式值

注意
如果CSS的样式名中含有-,这种名称在JS中是不合法的需要将这种样式名修改为驼峰命名法,去掉-,然后将-后的字母大写

box1.style.width = "300px";
  • 通过style属性设置的样式都是内联样式,而内联样式有较高的优先级,所以通过JS修改的样式往往会立即展示
  • 通过style属性设置和读取的都是内联样式,无法读取样式表中的样式
  • 如果在样式中写了!importtant,则此时样式会有最高的优先级,即使通过JS也不能覆盖样式,此时将会导致JS修改样式失效,所以尽量不要为样式添加!important

2.读取元素的样式(不限范围)

获取元素当前显示的样式

元素.currentStyle

语法:元素.currentStyle.样式名
(只有IE支持,其他的不支持)
它可以用来读取当前元素正在显示的样式

getComputedStyle()

getComputedStyle()这个方法来获取元素当前的样式

  • 这个方法是window的方法,可以直接使用
  • 需要两个参数:
    要获取样式的元素
    可传递一个伪元素,一般都传递null
  • 该方法会返回一个对象,对象中封装了当前元素对应的样式
    可以通过对象.样式名来读取样式
    如果获取的样式没有设置,则会获取到真实的值,而不是默认值
    比如,没有设置width,他不会获取到auto,而是一个长度
getComputedStyle(box,null).width

通过currentStyle和getComputedStyle()读取到的样式都是只读的,不能修改,如果要修改必须通过style属性

自定义函数,让ie8和其他浏览器都兼容

  • 参数
    obj 要获取样式的元素
    name 要获取的样式名

  • 实现

function getStyle(obj,name){
     //不需要识别浏览器版本,只需要判断是否有getcomputedStyle方法
      if(window.getComputedStyle){//括号里面不能直接写getComputedStyle(为变量),应该写成window.get...(为属性)
            //正常浏览器的方式
            return getComputedStyle(obj,null)[name];
      }else{
            IE8的方式
            return obj.currentStyle[name];
      }
}

//使用三元运算符
return window.getComputedStyle?getComputedStyle(obj,null)[name]:obj.currentStyle[name];

注:变量如果没找到就报错,如果属性没找到就返回undefined

3.其他样式相关的属性

HTML DOM Element 对象(https://www.w3school.com.cn/jsref/dom_obj_all.asp)

  • clientWidth和clientHeight
    这两个属性可以获取元素的可见高度和宽度

    • 这些属性都是不带px的,返回的都是数字,可以直接进行计算
    • 会获取元素宽度和高度,包括内容区和内边距,包括padding不包括border
    • 这些属性都是只读的
  • offsetWidth和offsetHeight
    获取元素的整个的宽度和高度,包括内容区,内边距和边框

  • offsetParent
    可以用来获取当前元素的定位父元素

    • 会获取到离当前元素最近的开启了定位的祖先元素
    • 如果所有的祖先元素都没有开启定位,则返回body
<div id="box3" style="position: relative;">
      <div id="box2" style="position: relative;">
            <div> id="box1"</div>
      </div>
</div>
  • offsetLeft
    当前元素相对于其定位元素的水平偏移量

  • offsetTop
    当前元素相对于定位元素的垂直偏移量

  • scrollWidth和scrollHeight
    可以获取元素整个滚动区域的高度

    clientHeight获取的是父高度,而scrollWidth获取的是子的不可见的需要滚轮拖动所有部分的高度

  • scrollLeft和scrollTop
    可以获取水平滚动条、垂直滚动条滚动的距离

当满足scrollHeight - scrollTop == clientHeight时,说明垂直滚动滚动到底了

<script type="text/javascript">
      window.onload = dunction(){
            /**
             * 当垂直滚动条滚动到底是表单项可以使用
             * onscroll
             *   - 该事件会在元素的滚动条滚动时触发
             */
            //获取id为info的p元素
            var info = document.getElementById("info");
            //为info绑定一个滚动条滚动的时间
            info.onscroll = function(){
                  //检查垂直滚动条是否滚动到底了
                  if(info.scrollHeight - info.scrollTop == info.clientHeight){
                        //滚动条滚动到底,使表单项可用
                        /*disable属性可以设置一个元素是否禁用
                          如果设置为true,则元素禁用
                          如果设置为false,则元素可用
                          inputs[0].disabled = false;
                          inputs[1].disabled = false;
                  }
            };
      }
</script>
<body>
<input type="checkbox" disabled="disabled" />我已仔细阅读协议,一定遵守
<input type="submit" value="注册" disabled="disabled" />
</body>
原文地址:https://www.cnblogs.com/psyduck/p/14271333.html