你未必知道的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 相关文章推荐
设置iframe的document.designMode后仅Firefox中其body.innerHTML为br
Feb 27 Javascript
jquery隐藏标签和显示标签的实例
Nov 11 Javascript
Node调试工具JSHint的安装及配置教程
May 27 Javascript
JavaScript的内存释放问题详解
Jan 21 Javascript
Bootstrap3制作自己的导航栏
May 12 Javascript
JavaScript 数组的深度复制解析
Nov 02 Javascript
javaScript强制保留两位小数的输入数校验和小数保留问题
May 09 Javascript
解决angularjs WdatePicker ng-model的问题
Sep 13 Javascript
vue实现百度下拉列表交互操作示例
Mar 12 Javascript
JS实现数组删除指定元素功能示例
Jun 05 Javascript
Layui实现带查询条件的分页
Jul 27 Javascript
React 父子组件通信的实现方法
Dec 05 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
详细介绍:Apache+PHP+MySQL配置攻略
2006/09/05 PHP
PHP中创建并处理图象
2006/10/09 PHP
CentOS6.5 编译安装lnmp环境
2014/12/21 PHP
PHP使用Memcache时模拟命名空间及缓存失效问题的解决
2016/02/27 PHP
PHP简单实现记录网站访问量功能示例
2018/06/06 PHP
PHP实现小程序批量通知推送
2018/11/27 PHP
PHP命名空间与自动加载机制的基础介绍
2019/08/25 PHP
Laravel 框架返回状态拦截代码
2019/10/18 PHP
JS 有名函数表达式全面解析
2010/03/19 Javascript
jQuery让控件左右移动的三种实现方法
2013/09/08 Javascript
jQuery阻止事件冒泡具体实现
2013/10/11 Javascript
jqGrid日期格式的判断示例代码(开始日期与结束日期)
2013/11/08 Javascript
Vuejs第十篇之vuejs父子组件通信
2016/09/06 Javascript
获取JavaScript异步函数的返回值
2016/12/21 Javascript
利用JS做网页特效_大图轮播(实例讲解)
2017/08/09 Javascript
Bootstrap实现省市区三级联动(亲测可用)
2019/07/26 Javascript
[05:03]显微镜下的DOTA2第十期——Ti3豪之超神幽鬼
2014/06/23 DOTA
python中实现php的var_dump函数功能
2015/01/21 Python
Python端口扫描简单程序
2016/11/10 Python
使用python制作一个为hex文件增加版本号的脚本实例
2019/06/12 Python
Python计算机视觉里的IOU计算实例
2020/01/17 Python
详解Python yaml模块
2020/09/23 Python
Python实现钉钉/企业微信自动打卡的示例代码
2021/02/02 Python
英国领先的在线高尔夫商店:Scottsdale Golf
2019/08/26 全球购物
JDK安装目录下有哪些内容
2014/08/25 面试题
金融专业毕业生推荐信
2013/11/26 职场文书
社区包粽子活动方案
2014/01/21 职场文书
民主生活会剖析材料
2014/09/30 职场文书
土建施工员岗位职责
2015/04/11 职场文书
2015年前台接待工作总结
2015/05/04 职场文书
旅游项目合作意向书
2015/05/08 职场文书
庆七一晚会主持词
2015/06/30 职场文书
优秀新员工事迹材料
2019/05/13 职场文书
Node.js实现爬取网站图片的示例代码
2022/04/04 NodeJs
Python 使用 Frame tkraise() 方法在 Tkinter 应用程序中的Frame之间切换
2022/04/24 Python
详解Go语言中配置文件使用与日志配置
2022/06/01 Golang