106-110 操作内联样式,获取元素的样式,其他样式相关的属性

操作内联样式

通过JS修改的样式:

语法:元素.style.样式名 =样式值

注意:

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

通过style属性设置样式都是内联样式,而内联样式有较高的优先级,所以通过JS修改的样式往往会立即显示

但是如果在样式中写了!important,则此时样式会有最高的优先级,即使通过JS也不能覆盖该样式,此时将会导致JS修改样式失效,所以尽量不要为样式添加!important

通过style属性设置和读取内联样式

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>操作内联样式</title>
    <style>
        #box {
            width: 100px;
            height: 100px;
            background-color: red;
        }
    </style>
    <script>
        window.onload = function () {
            var button = document.getElementById("button");
            button.onclick = function () {
                box.style.width = "300px";
                box.style.height = "300px";
                box.style.backgroundColor = "yellow";
            };
            var button1 = document.getElementById("button1");
            button1.onclick = function () {
                alert(box.style.width);
                alert(box.style.height);
                alert(box.style.backgroundColor);
            };
        };
    </script>
</head>

<body>
<div id="box"></div>
<button id="button">点我一下</button>
<button id="button1">查看内联样式</button>
</body>
</html>

获取元素的样式

currentStyle

语法:元素.currentStyle.样式名

它可以用来读取当前正在显示的样式,如果当前元素没有设置该样式,则获取它的默认值

提示:只有IE支持,其他浏览器不支持

getComputedStyle() 推荐

这个方法来获取元素当前的样式,这个方法是window的方法,可以直接使用,需要两个参数

第一个:要获取的样式的元素

第二个:可以传一个伪参数,一般传null

该方法会返回一个对象,对象中封装了当前元素对应的样式(属性),可以通过对象.样式名来读取样式,如果获取的样式没有设置,则会获取到真实的值,而不是默认值,比如:没有设置width,它不会获取到auto,而是一个长度,但是该方法不支持IE8及以下的浏览器

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

自定义函数实现获取元素当前显示样本

定义一个函数,用来获取指定元素的当前的样式

参数:obj 要获取样式的元素

​ name 要获取的样式名

javascript 复制代码
 /**
 * 这种思想常用来解决兼容性问题
 * @param obj 对象
 * @param name 字符串属性
 * @returns {*}
 */
function  getStyle(obj ,name){
    if(window.getComputedStyle){
 //这里最好加window. 因为不加的话,他就是变量,变量没找到会报错,下面就没有机会执行了,
        // 要是属性的话,是undefined,就转false,去执行else,不会报错了。
        return getComputedStyle(obj,null)[name];
    }else {
        return  obj.currentStyle[name];
    }
}

其他样式相关的属性

clientWidth clientHeight

这两个属性可以获取元素的可见宽度于高度,这些【包括后面的】属性都是不带px的,返回都是一个数字,可以直接进行计算,会获取元素的高度和宽度,包括内容区和内边距,这些属性都是只读的,不能修改。

offsetWidth offsetHeight

获取元素整个宽度和高度,包括内容区、内边距和边框

javascript 复制代码
alert(box.offsetWidth);

offsetParent

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

会获取离当前元素最近的开启了定位的祖先元素

如果所有的祖先元素都没有开启定位,则会返回body

javascript 复制代码
var op =box.offsetParent

offsetLeft

当前元素相对于其定位父元素的水平

javascript 复制代码
alert(box.offsetLest);

offsetTop

当前元素相对于其定位父元素的垂直偏移量

javascript 复制代码
alert(box.offsetLeft)

scrollWitdth
scrollHeight

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

javascript 复制代码
alert(box.scrollWidth);

scrollLeft

可以获取水平滚动读条的距离

scrollTop

可以获取垂直滚动条滚动的距离

javascript 复制代码
alert(box.scrollTop);

技巧:

scrollHeight -scrollTop == clientHeight说明垂直滚动条到底了

scrollWidth - scrollLeft == clientWidth说明水平滚动条到底了

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        #box {
            width: 300px;
            height: 500px;
            background-color: green;
            overflow: auto;
        }
    </style>
    <script>
        /**
         * 当垂直表单滚动到底时,使表单可选项可用
         * onscroll
         * 该事件会在元素滚动条滚动时触发
         */
        window.onload = function () {
            var box = document.getElementById("box");
            var inputs = document.getElementsByTagName("input");
            box.onscroll = function () {
                if (box.scrollHeight - box.scrollTop == box.clientHeight) {
                    /**
                     * disabled属性设置一个元素是否可以
                     * 如果true,则表示禁用
                     * 如果使false,则表示启用
                     * @type {boolean}
                     */
                    inputs[0].disabled = false;
                    inputs[1].disabled = false;
                }
            };
        };

    </script>
</head>
<body>
<div >
    <h3>注册</h3>
    <p id="box">年少轻狂的岁月沉淀下来的是哪些再也回不到的过去,而总让人感叹的则是未能珍惜而失去的那些,
        但这些也恰恰是我们让你去体会的,因为年少轻狂的岁月,一生也只有一次。世间最珍贵的不是得不到或已失去的,而是现在能把握的。
        我们生活在一个复杂又充满无奈的世界,身上背负着太多太多的责任和使命,
        有时我们处理不当,就会不堪重负,难以忍受。最宽阔的是海洋,比海洋更宽阔的是天空,
        比天空更宽阔的是人的胸怀。当你紧握双手,里面什么也没有,
        当你打开双手,世界就在你手中。
    年少轻狂的岁月沉淀下来的是哪些再也回不到的过去,而总让人感叹的则是未能珍惜而失去的那些,
        但这些也恰恰是我们让你去体会的,因为年少轻狂的岁月,一生也只有一次。世间最珍贵的不是得不到或已失去的,而是现在能把握的。
        我们生活在一个复杂又充满无奈的世界,身上背负着太多太多的责任和使命,
        有时我们处理不当,就会不堪重负,难以忍受。最宽阔的是海洋,比海洋更宽阔的是天空,
        比天空更宽阔的是人的胸怀。当你紧握双手,里面什么也没有,
        当你打开双手,世界就在你手中。
    年少轻狂的岁月沉淀下来的是哪些再也回不到的过去,而总让人感叹的则是未能珍惜而失去的那些,
        但这些也恰恰是我们让你去体会的,因为年少轻狂的岁月,一生也只有一次。世间最珍贵的不是得不到或已失去的,而是现在能把握的。
        我们生活在一个复杂又充满无奈的世界,身上背负着太多太多的责任和使命,
        有时我们处理不当,就会不堪重负,难以忍受。最宽阔的是海洋,比海洋更宽阔的是天空,
        比天空更宽阔的是人的胸怀。当你紧握双手,里面什么也没有,
        当你打开双手,世界就在你手中。
    </p>


</div>
    <input type="checkbox" disabled="disabled"/>已阅读协议,我一定遵守
<input type="submit" value="注册" disabled="disabled" />
</body>
</html>
相关推荐
0和1的舞者4 小时前
Spring AOP详解(一)
java·开发语言·前端·spring·aop·面向切面
web小白成长日记4 小时前
在Vue样式中使用JavaScript 变量(CSS 变量注入)
前端·javascript·css·vue.js
QT 小鲜肉4 小时前
【Linux命令大全】001.文件管理之which命令(实操篇)
linux·运维·服务器·前端·chrome·笔记
C_心欲无痕4 小时前
react - useImperativeHandle让子组件“暴露方法”给父组件调用
前端·javascript·react.js
JackieDYH5 小时前
HTML+CSS+JavaScript实现图像对比滑块demo
javascript·css·html
BullSmall6 小时前
支持离线配置修改及删除操作的实现方案
前端
全栈前端老曹6 小时前
【前端路由】Vue Router 嵌套路由 - 配置父子级路由、命名视图、动态路径匹配
前端·javascript·vue.js·node.js·ecmascript·vue-router·前端路由
EndingCoder6 小时前
安装和设置 TypeScript 开发环境
前端·javascript·typescript
张雨zy7 小时前
Vue 项目管理数据时,Cookie、Pinia 和 LocalStorage 三种常见的工具的选择
前端·javascript·vue.js
五月君_7 小时前
Nuxt UI v4.3 发布:原生 AI 富文本编辑器来了,Vue 生态又添一员猛将!
前端·javascript·vue.js·人工智能·ui