你未必知道的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 相关文章推荐
Flash对联广告的关闭按钮讨论
Jan 30 Javascript
jquery cookie插件代码类
May 26 Javascript
Js数组的操作push,pop,shift,unshift等方法详细介绍
Dec 28 Javascript
三种动态加载js的jquery实例代码另附去除js方法
Apr 30 Javascript
js统计页面的来访次数实现代码
May 09 Javascript
EasyUI实现二级页面的内容勾选的方法
Mar 01 Javascript
深入理解JavaScript中的对象
Jun 04 Javascript
BootStrap实现树形目录组件代码详解
Jun 21 Javascript
JavaScript直播评论发弹幕切图功能点集合效果代码
Jun 26 Javascript
js放到head中失效的原因与解决方法
Mar 07 Javascript
如何在Angular应用中创建包含组件方法示例
Mar 23 Javascript
JavaScript实现打砖块游戏
Feb 25 Javascript
网页广告中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和Mysqlweb应用开发核心技术-第1部分 Php基础-2 php语言介绍
2011/07/03 PHP
php中一个有意思的日期逻辑处理
2012/03/25 PHP
PHP中使用Imagick读取pdf并生成png缩略图实例
2015/01/21 PHP
PHP常用处理静态操作类
2015/04/03 PHP
PHP模板解析类实例
2015/07/09 PHP
Yii2.0框架behaviors方法使用实例分析
2019/09/30 PHP
JScript内置对象Array中元素的删除方法
2007/03/08 Javascript
fckeditor 获取文本框值的实现代码
2009/02/09 Javascript
对字符串进行HTML编码和解码的JavaScript函数
2010/02/01 Javascript
使用JS进行目录上传(相当于批量上传)
2010/12/05 Javascript
使用jQuery Ajax功能时需要注意的一个问题(内存溢出)
2012/05/30 Javascript
jquery实现公告翻滚效果
2015/02/27 Javascript
10个很棒的jQuery代码片段
2015/09/24 Javascript
用JavaScript判断CSS浏览器类型前缀的两种方法
2015/10/08 Javascript
node.js回调函数之阻塞调用与非阻塞调用
2015/11/13 Javascript
jQuery ajax提交Form表单实例(附demo源码)
2016/04/06 Javascript
bootstrap 点击空白处popover弹出框隐藏实例
2018/01/24 Javascript
axios携带cookie配置详解(axios+koa)
2018/12/28 Javascript
微信小程序自定义头部导航栏和导航栏背景图片 navigationStyle问题
2019/07/26 Javascript
深入Python解释器理解Python中的字节码
2015/04/01 Python
基于进程内通讯的python聊天室实现方法
2015/06/28 Python
[原创]使用豆瓣提供的国内pypi源
2017/07/02 Python
详解Django 中是否使用时区的区别
2018/06/14 Python
pycharm 配置远程解释器的方法
2018/10/28 Python
一行Python代码制作动态二维码的实现
2019/09/09 Python
python数据预处理方式 :数据降维
2020/02/24 Python
机关党建工作汇报材料
2014/08/20 职场文书
学校领导班子群众路线整改措施
2014/09/16 职场文书
正风肃纪剖析材料
2014/09/30 职场文书
副乡长民主生活会个人对照检查材料思想汇报
2014/10/01 职场文书
2014财务年终工作总结
2014/12/08 职场文书
2015年银行信贷员工作总结
2015/05/19 职场文书
CSS完成视差滚动效果
2021/04/27 HTML / CSS
如何用PHP实现多线程编程
2021/05/26 PHP
mysql分组后合并显示一个字段的多条数据方式
2022/01/22 MySQL
python自动化测试之Selenium详解
2022/03/13 Python