深入理解脚本化CSS系列第三篇——脚本化CSS类

前面的话

  在实际工作中,我们使用javascript操作CSS样式时,如果要改变大量样式,会使用脚本化CSS类的技术,本文将详细介绍脚本化CSS类

style

  我们在改变元素的少部分样式时,一般会直接改变其行间样式

<div id="test" style="height:100px;width:100px;background-color:blue;"></div>
<script>
test.onclick = function(){
    test.style.backgroundColor = ‘green‘;
}
</script>

cssText

  改变元素的较多样式时,可以使用cssText

<div id="test" style="height:100px;width:100px;background-color:blue;"></div>
<script>
test.onclick = function(){
    test.style.cssText = ‘height:50px;width:50px;background-color:green‘;
}
</script>

css类

  更常用的是使用css类,将更改前和更改后的样式提前设置为类名。只要更改其类名即可

<style>
.big{
    height:100px;
    width:100px;
    background-color:blue;
}
.small{
    height:50px;
    width:50px;
    background-color:green;
}
</style>

<div id="test" class="big"></div>
<script>
test.onclick = function(){
    test.className = ‘small‘;
}
</script>

classList

  如果要改变多个类名,使用classList更为方便

  [注意]IE9-浏览器不支持

<style>
.big{
    height:100px;
    width:100px;
}
.small{
    height:50px;
    width:50px;
}
.green{
    background-color:green;
}
.blue{
    background-color:blue;
}
</style>
<div id="test" class="big green"></div>
<button id="btn1">大小变化</button>
<button id="btn2">颜色变化</button>
<script>
btn1.onclick = function(){
    test.classList.toggle(‘small‘);
}
btn2.onclick = function(){
    test.classList.toggle(‘blue‘);
}
</script>

性能

<div id="test" style="height:100px;width:100px;background-color:blue;"></div>
<script>
test.onclick = function(){
    console.time();
    for(var i = 0; i < 10000; i++){
        test.style.backgroundColor = ‘green‘;
        test.style.height = ‘50px‘;
        test.style.width = ‘50px‘;
    }
    console.timeEnd();//59.937ms
}
</script>
/*****************************/
<div id="test" style="height:100px;width:100px;background-color:blue;"></div>
<script>
test.onclick = function(){
    console.time();
    for(var i = 0; i < 10000; i++){
    test.style.cssText = ‘height:50px;width:50px;background-color:green‘;
    }
    console.timeEnd();//38.065ms
}
</script>
/*****************************/
<style>
.big{
    height:100px;
    width:100px;
    background-color:blue;
}
.small{
    height:50px;
    width:50px;
    background-color:green;
}
</style>
<div id="test" class="big"></div>
<script>
test.onclick = function(){
    console.time();
    for(var i = 0; i < 10000; i++){
    test.className = ‘small‘;
    }
    console.timeEnd();//9.534ms
}
</script>

  在1万次循环中,改变style属性中的具体样式花费了59.937ms,改变style属性中的cssText花费了38.065ms,而改变css类名只花费了9.534ms

  由此可见,使用脚本化CSS类的方式可以大大地提高性能

最后

  脚本化CSS的场景非常常见,一直提倡使用脚本化CSS类的方式来操作CSS,以为只是为了方便。感觉脚本化CSS类应该和使用cssText的性能差不多,但没想到最终结果竟然不是同一个数量级的,改变CSS类名的性能竟然提升这么多

  少一点感性认识,多一些理性测试

  欢迎交流

时间: 2024-12-20 02:01:19

深入理解脚本化CSS系列第三篇——脚本化CSS类的相关文章

深入理解脚本化CSS系列第六篇——脚本化伪元素的6种方法

× 目录 [1]动态样式 [2]CSS类[3]setAttribute()[4]CSSRule对象添加[5]空样式覆盖[6]CSSRule对象删除 前面的话 我们可以通过计算样式来读取伪元素的样式信息,但是却无法使用javascript来直接操作伪元素,本文以一个需求解决为例,详细介绍脚本化伪元素的6种方法 需求说明 [1]为id=box的div元素添加content="前缀"的:before伪元素 [2]为已经添加:before伪元素的div元素删除伪元素  [注意]由于IE7-浏览

深入理解脚本化CSS系列第四篇——脚本化样式表

× 目录 [1]CSSStyleSheet [2]CSSRule 前面的话 关于脚本化CSS,查询样式时,查询的是计算样式:设置单个样式时,设置的是行间样式:设置多个样式时,设置的是CSS类名.脚本化样式表当然也是一种脚本化CSS的技术,虽然不经常使用,但有时却非常有用.下面将详细介绍脚本化样式表的内容 CSSStyleSheet CSSStyleSheet类型表示的是样式表.我们知道,引入CSS一共有3种方式,包括行间样式.内部样式和外部样式.其中,内部样式和外部样式分别通过<style>和

深入理解DOM事件类型系列第三篇——变动事件

× 目录 [1]删除节点 [2]插入节点 [3]特性节点[4]文本节点 前面的话 变动(mutation)事件能在DOM中的某一部分发生变化时给出提示,这类事件非常有用,但都只能使用DOM2级事件处理程序,且由于浏览器兼容性不好,所以用的不广泛 删除节点 删除节点时,涉及到DOMNodeRemoved事件.DOMNodeRemovedFromDocument事件和DOMSubtreeModified事件这三个事件,下面将详细介绍 DOMNodeRemoved 在使用removeChild()或r

深入理解DOM事件机制系列第三篇——事件对象

× 目录 [1]获取 [2]事件类型 [3]事件目标[4]事件代理[5]事件冒泡[6]事件流[7]默认行为 前面的话 在触发DOM上的某个事件时,会产生一个事件对象event,这个对象中包含着所有与事件有关的信息.所有浏览器都支持event对象,但支持方式不同.本文将详细介绍事件对象 获取事件对象 [1]一般地,event对象是事件程序的第一个参数 [注意]IE8-浏览器不支持 //IE8-浏览器输出undefined,其他浏览器则输出事件对象[object MouseEvent] <div i

深入理解表单脚本系列第三篇——选择文本

× 目录 [1]select() [2]select事件 [3]setSelectionRange() 前面的话 表单是最早用来与用户交互的工具,具有丰富的控件和属性.基本上,它们通过各种控件和属性就可以解决大部分问题.但还有一些问题还是需要表单脚本来实现的,比如本文将要说到的选择文本 select() select()方法用于选择文本框(指type为text的input元素和textarea元素)中的所有文本,该方法不接受参数,且无返回值 <input id="text" va

深入理解javascript函数系列第三篇

前面的话 函数是javascript中特殊的对象,可以拥有属性和方法,就像普通的对象拥有属性和方法一样.甚至可以用Function()构造函数来创建新的函数对象.本文是深入理解javascript函数系列第三篇--属性和方法 属性 [length属性] 函数系列第二篇中介绍过,arguments对象的length属性表示实参个数,而函数的length属性则表示形参个数 function add(x,y){ console.log(arguments.length)//3 console.log(

深入理解javascript作用域系列第三篇

前面的话 一般认为,javascript代码在执行时是由上到下一行一行执行的.但实际上这并不完全正确,主要是因为声明提升的存在.本文是深入理解javascript作用域系列第三篇--声明提升(hoisting) 变量声明提升 a = 2 ; var a; console.log( a ); 直觉上,会认为是undefined,因为var a声明在a = 2;之后,可能变量被重新赋值了,因为会被赋予默认值undefined.但是,真正的输出结果是2 console.log( a ) ; var a

深入理解javascript作用域系列第三篇——声明提升(hoisting)

× 目录 [1]变量 [2]函数 [3]优先 前面的话 一般认为,javascript代码在执行时是由上到下一行一行执行的.但实际上这并不完全正确,主要是因为声明提升的存在.本文是深入理解javascript作用域系列第三篇——声明提升(hoisting) 变量声明提升 a = 2 ; var a; console.log( a ); 直觉上,会认为是undefined,因为var a声明在a = 2;之后,可能变量被重新赋值了,因为会被赋予默认值undefined.但是,真正的输出结果是2 c

javascript面向对象系列第三篇——实现继承的3种形式

前面的话 学习如何创建对象是理解面向对象编程的第一步,第二步是理解继承.开宗明义,继承是指在原有对象的基础上,略作修改,得到一个新的对象.javascript主要包括类式继承.原型继承和拷贝继承这三种继承方式.本文是javascript面向对象系列第三篇——实现继承的3种形式 类式继承 大多数面向对象的编程语言都支持类和类继承的特性,而JS却不支持这些特性,只能通过其他方法定义并关联多个相似的对象,如new和instanceof.不过在后来的ES6中新增了一些元素,比如class关键字,但这并不