• 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>
    
  • 相关阅读:
    RN 各种小问题
    迷宫问题的求解(回溯法、深度优先遍历、广度优先遍历)
    java 对象的初始化流程(静态成员、静态代码块、普通代码块、构造方法)
    java四种访问权限
    八大排序之归并排序
    八大排序之堆排序
    八大排序之选择排序
    八大排序之快速排序
    Java动态代理和cglib动态代理
    类加载器 ClassLoder详解
  • 原文地址:https://www.cnblogs.com/psyduck/p/14271333.html
Copyright © 2020-2023  润新知