你未必知道的JavaScript和CSS交互的5种方法


Posted in Javascript onApril 02, 2014

随着浏览器不断的升级改进,CSS和JavaScript之间的界限越来越模糊。本来它们是负责着完全不同的功能,但最终,它们都属于网页前端技术,它们需要相互密切的合作。我们的网页中都有.js文件和.css文件,但这并不意味着CSS和js是独立不能交互的。下面要讲的这五种JavaScript和CSS共同合作的方法你也许未必知道!

用JavaScript获取伪元素(pseudo-element)属性

大家都知道如何通过一个元素的style属性获取它的CSS样式值,但能获取伪元素(pseudo-element)的属性值吗?可以的,使用JavaScript也可以访问页面中的伪元素。

<span style="font-size:18px;">// Get the color value of .element:before 
var color = window.getComputedStyle( 
document.querySelector('.element'), ':before' 
).getPropertyValue('color'); // Get the content value of .element:before 
var content = window.getComputedStyle( 
document.querySelector('.element'), ':before' 
).getPropertyValue('content');</span>

看见了吗,我能访问伪元素里的content属性值。如果你想创建一个动态的,风格别致的网站,这是一种非常有用的技术!

classList API

很多的JavaScript工具库里都有addClass,removeClass和toggleClass等方法。为了对老式浏览器的兼容,这些类库采用的方法都是先搜索元素的className,追加和删除这个类,然后更新className。其实有一个新型的API提供了添加,删除和反转CSS类属性的方法,叫做classList:

<span style="font-size:18px;">myDiv.classList.add('myCssClass'); // Adds a class 
myDiv.classList.remove('myCssClass'); // Removes a class 
myDiv.classList.toggle('myCssClass'); // Toggles a class</span>

大多数的浏览器里很早就实现了classListAPI,而且最终IE10里也实现了它。

直接对样式表进行添加和删除样式规则

我们都非常熟悉使用element.style.propertyName来修改样式,使用JavaScript能帮助我们做到这些,但你知道如何新增或修一个现有的CSS样式规则吗?其实非常的简单。

<span style="font-size:18px;">function addCSSRule(sheet, selector, rules, index) { 
if(sheet.insertRule) { 
sheet.insertRule(selector + "{" + rules + "}", index); 
} 
else { 
sheet.addRule(selector, rules, index); 
} 
} 
// Use it! 
addCSSRule(document.styleSheets[0], "header", "float: left"); 
</span>

这种方法通常是用来创建一个新的样式规则,但如果你想修改一个现有的规则,也可以这样做。

加载CSS文件

延迟加载图片、JSON、脚本等是用来加快页面显示速度的好方法。我们可以使用curl.js等这样JavaScript加载器来延迟加载这些外部资源,可你知道CSS样式表也可以延迟加载吗,而且在加载成功后回调函数会给予通知。

<span style="font-size:18px;">curl( 
[ 
"namespace/MyWidget", 
"css!namespace/resources/MyWidget.css" 
], 
function(MyWidget) { 
// 你可以对MyWidget进行操作 
// 这里没有对这个CSS文件引用,因为不需要; 
// 我们只需要它已经加载到页面上了 
} 
});</span>

当所有的资源都加载后,回调函数就会触发,我可在回调函数里加载它。非常有用!

CSS鼠标指针事件

CSS鼠标指针事件pointer-events属性非常的有趣,它的功效非常像JavaScript,当你把这个属性设置为none时,它能有效的阻止禁止这个元素,你也许会说“这又如何?”,但事实上,它是禁止了这个元素上的任何JavaScript事件或回调函数!

<span style="font-size:18px;">.disabled { pointer-events: none; }</span>

点击这个元素,你会发现任何你放置在这个元素上的监听器都不会触发任何事件。一个神奇的功能,真的——你不在需要为了防止某个事件会被触发而去检查某个css类是否存在。

就是这5给你也许还没有发现的CSS和JavaScript交互的方法。你还有新的发现吗?分享出来!

Javascript 相关文章推荐
JavaScript操作XML实例代码(获取新闻标题并分页,并分页)
May 25 Javascript
JavaScript版DateAdd和DateDiff函数代码
Mar 01 Javascript
js取整数、取余数的方法
May 11 Javascript
BootStrap智能表单实战系列(七)验证的支持
Jun 13 Javascript
jQuery插件EasyUI实现Layout框架页面中弹出窗体到最顶层效果(穿越iframe)
Aug 05 Javascript
Angular的模块化(代码分享)
Dec 26 Javascript
JS遍历对象属性的方法示例
Jan 10 Javascript
扩展bootstrap的modal模态框-动态添加modal框-弹出多个modal框
Feb 21 Javascript
详解基于Node.js的微信JS-SDK后端接口实现代码
Jul 15 Javascript
微信小程序实现录制、试听、上传音频功能(带波形图)
Feb 27 Javascript
JS实现纸牌发牌动画
Jan 19 Javascript
vue基于Teleport实现Modal组件
May 31 Vue.js
网页广告中JS代码的信息监听示例
Apr 02 #Javascript
使用jquery中height()方法获取各种高度大全
Apr 02 #Javascript
jquery 判断滚动条到达了底部和顶端的方法
Apr 02 #Javascript
jquery实现不同大小浏览器使用不同的css样式表的方法
Apr 02 #Javascript
jQuery瀑布流插件Wookmark使用实例
Apr 02 #Javascript
jquery删除指定的html标签并保留标签内文本内容的方法
Apr 02 #Javascript
jQuery判断div随滚动条滚动到一定位置后停止
Apr 02 #Javascript
You might like
php版银联支付接口开发简明教程
2016/10/14 PHP
mysqli扩展无法在PHP7下升级问题的解决
2019/09/10 PHP
PHP copy函数使用案例代码解析
2020/09/01 PHP
JavaScript基础知识之数据类型
2012/08/06 Javascript
实用的Jquery选项卡TAB示例代码
2013/08/28 Javascript
在JavaScript中处理时间之getHours()方法的使用
2015/06/10 Javascript
jQuery+PHP+MySQL二级联动下拉菜单实例讲解
2015/10/27 Javascript
js实现页面跳转的五种方法推荐
2016/03/10 Javascript
angular使用post、get向后台传参的问题实例
2017/05/27 Javascript
详解关于react-redux中的connect用法介绍及原理解析
2017/09/11 Javascript
微信小程序获取手机系统信息的方法【附源码下载】
2017/12/07 Javascript
浅谈mvvm-simple双向绑定简单实现
2018/04/18 Javascript
webpack css加载和图片加载的方法示例
2018/09/11 Javascript
在NPM发布自己造的轮子的方法步骤
2019/03/09 Javascript
小程序如何使用分包加载的实现方法
2019/05/22 Javascript
解决layer弹出层msg的文字不显示的问题
2019/09/11 Javascript
vue.js的状态管理vuex中store的使用详解
2019/11/08 Javascript
Javascript中的this,bind和that使用实例
2019/12/05 Javascript
js实现炫酷光感效果
2020/09/05 Javascript
pyramid配置session的方法教程
2013/11/27 Python
Python排序搜索基本算法之归并排序实例分析
2017/12/08 Python
如何利用python查找电脑文件
2018/04/27 Python
使用python进行文本预处理和提取特征的实例
2018/06/05 Python
解决Pycharm调用Turtle时 窗口一闪而过的问题
2019/02/16 Python
简单了解python filter、map、reduce的区别
2020/01/14 Python
numpy矩阵数值太多不能全部显示的解决
2020/05/14 Python
HTML5 Canvas之测试浏览器是否支持Canvas的方法
2015/01/01 HTML / CSS
实习协议书范本
2014/04/22 职场文书
我的理想演讲稿
2014/04/30 职场文书
学生党员一帮一活动总结
2014/07/08 职场文书
捐资助学感谢信
2015/01/21 职场文书
美容院管理规章制度
2015/08/05 职场文书
任命书格式范文
2015/09/22 职场文书
小学英语教学反思范文
2016/02/15 职场文书
分享五个Node.js开发的优秀实践 
2022/04/07 NodeJs
Spring JPA 增加字段执行异常问题及解决
2022/06/10 Java/Android