你未必知道的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 相关文章推荐
ASP.NET中基于JQUERY的高性能的TreeView补充
Feb 23 Javascript
JQuery扩展插件Validate—6 radio、checkbox、select的验证
Sep 05 Javascript
页面只能打开一次Cooike如何实现
Dec 04 Javascript
js实现透明度渐变效果的方法
Apr 10 Javascript
谈谈encodeURI和encodeURIComponent以及escape的区别与应用
Nov 24 Javascript
JS实现的几个常用算法
Nov 12 Javascript
Bootstrap fileinput 上传新文件移除时触发服务器同步删除的配置
Oct 08 Javascript
vue-music 使用better-scroll遇到轮播图不能自动轮播问题
Dec 03 Javascript
微信小程序实现发送验证码按钮效果
Dec 20 Javascript
jQuery内容过滤选择器与子元素过滤选择器用法实例分析
Feb 20 jQuery
LayUI动态设置checkbox不显示的解决方法
Sep 02 Javascript
layui禁用侧边导航栏点击事件的解决方法
Sep 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
3.从实例开始
2006/10/09 PHP
深入Memcache的Session数据的多服务器共享详解
2013/06/13 PHP
php生成curl命令行的方法
2015/12/14 PHP
php实现word转html的方法
2016/01/22 PHP
JScript中的&quot;this&quot;关键字使用方式补充材料
2007/03/08 Javascript
关于IE浏览器以及Firefox下的javascript冒泡事件的响应层级
2010/10/14 Javascript
教您去掉ie网页加载进度条的方法
2010/12/09 Javascript
利用Javascript判断操作系统的类型实现不同操作系统下的兼容性
2013/01/29 Javascript
setTimeout函数兼容各主流浏览器运行执行效果实例
2013/06/13 Javascript
JS去除数组重复值的五种不同方法
2013/09/06 Javascript
JS正则表达式大全(整理详细且实用)
2013/11/14 Javascript
PHP使用方法重载实现动态创建属性的get和set方法
2014/11/17 Javascript
jquery实现自适应banner焦点图
2017/02/16 Javascript
JavaScript使用readAsDataUrl方法预览图片
2017/05/10 Javascript
Vue学习笔记进阶篇之过渡状态详解
2017/07/14 Javascript
jQuery接受后台传递的List的实例详解
2017/08/02 jQuery
vue2.0使用swiper组件实现轮播效果
2017/11/27 Javascript
JavaScript学习笔记之基于定时器实现图片无缝滚动功能详解
2019/01/09 Javascript
利用Python和OpenCV库将URL转换为OpenCV格式的方法
2015/03/27 Python
解决Python中字符串和数字拼接报错的方法
2016/10/23 Python
如何在Django中设置定时任务的方法示例
2019/01/18 Python
python re库的正则表达式入门学习教程
2019/03/08 Python
使用Python创建简单的HTTP服务器的方法步骤
2019/04/26 Python
Django组件content-type使用方法详解
2019/07/19 Python
python实现操作文件(文件夹)
2019/10/31 Python
django中嵌套的try-except实例
2020/05/21 Python
python使用隐式循环快速求和的实现示例
2020/09/11 Python
纯css3无js实现的Android Logo(有简单动画)
2013/01/21 HTML / CSS
新年爱情寄语
2014/04/08 职场文书
求职信内容一般写什么?
2015/03/20 职场文书
2015年机械设备管理工作总结
2015/05/04 职场文书
新闻稿怎么写
2015/07/18 职场文书
《老人与海鸥》教学反思
2016/02/16 职场文书
pandas中DataFrame检测重复值的实现
2021/05/26 Python
Python绘制散点图之可视化神器pyecharts
2022/07/07 Python
PostgreSQL之连接失败的问题及解决
2023/05/08 PostgreSQL