你未必知道的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 相关文章推荐
js验证是否为数字的总结
Apr 14 Javascript
javascript按位非运算符的使用方法
Nov 14 Javascript
js实现点击图片将图片地址复制到粘贴板的方法
Feb 16 Javascript
手机移动端实现 jquery和HTML5 Canvas的幸运大奖盘特效
Dec 06 Javascript
Vue自定义指令介绍(2)
Dec 08 Javascript
BootStrapValidator校验方式
Dec 19 Javascript
详解Angular.js指令中scope类型的几种特殊情况
Feb 21 Javascript
JS实现禁止用户使用Ctrl+鼠标滚轮缩放网页的方法
Apr 28 Javascript
jquery操作ul的一些操作笔记整理(干货)
Aug 31 jQuery
vue多页面开发和打包正确处理方法
Apr 20 Javascript
小程序云开发获取不到数据库记录的解决方法
May 18 Javascript
vue项目实现设置根据路由高亮对应的菜单项操作
Aug 06 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中改变图片的尺寸大小的代码
2011/07/17 PHP
一组PHP加密解密函数分享
2014/06/05 PHP
PHP实现原比例生成缩略图的方法
2016/02/03 PHP
jQuery实现div浮动层跟随页面滚动效果
2014/02/11 Javascript
JQuery中使用.each()遍历元素学习笔记
2014/11/08 Javascript
js中跨域方法原理详解
2015/07/19 Javascript
nodejs 的 session 简单使用
2016/06/06 NodeJs
jQuery实现的自定义弹出层效果实例详解
2016/09/04 Javascript
微信小程序之小豆瓣图书实例
2016/11/30 Javascript
ajax实现动态下拉框示例
2017/01/10 Javascript
漂亮实用的页面loading(加载)封装代码
2017/02/03 Javascript
JS表单验证方法实例小结【电话、身份证号、Email、中文、特殊字符、身份证号等】
2017/02/14 Javascript
ES6学习之变量的两种命名方法示例
2017/07/18 Javascript
node.js的exports、module.exports与ES6的export、export default深入详解
2017/10/26 Javascript
微信小程序简单实现form表单获取输入数据功能示例
2017/11/30 Javascript
vue实现给div绑定keyup的enter事件
2020/07/31 Javascript
antd Select下拉菜单动态添加option里的内容操作
2020/11/02 Javascript
vue-video-player 断点续播的实现
2021/02/01 Vue.js
python的Template使用指南
2014/09/11 Python
Java Web开发过程中登陆模块的验证码的实现方式总结
2016/05/25 Python
python使用pil进行图像处理(等比例压缩、裁剪)实例代码
2017/12/11 Python
python 除法保留两位小数点的方法
2018/07/16 Python
Django Form and ModelForm的区别与使用
2019/12/06 Python
Python3.6 + TensorFlow 安装配置图文教程(Windows 64 bit)
2020/02/24 Python
解决django框架model中外键不落实到数据库问题
2020/05/20 Python
基于Python和C++实现删除链表的节点
2020/07/06 Python
python实现简单猜单词游戏
2020/12/24 Python
美国环保婴儿用品公司:The Honest Company
2017/11/23 全球购物
法警的竞聘演讲稿
2014/01/02 职场文书
中国入世承诺
2014/04/01 职场文书
法院四风对照检查材料思想汇报
2014/10/06 职场文书
面试通知短信
2015/04/20 职场文书
市场营销计划书
2019/04/24 职场文书
gateway网关接口请求的校验方式
2021/07/15 Java/Android
「睡美人」爱洛公主粘土人开订
2022/03/22 日漫
微信小程序 WeUI扩展组件库的入门教程
2022/04/21 Javascript