JavaScript和CSS交互的方法汇总


Posted in Javascript onDecember 02, 2014

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

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

// 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');

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

classList API

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

myDiv.classList.add('myCssClass'); // Adds a class

myDiv.classList.remove('myCssClass'); // Removes a class

myDiv.classList.toggle('myCssClass'); // Toggles a class

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

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

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

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");

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

加载CSS文件

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

curl(

[

"namespace/MyWidget",

"css!namespace/resources/MyWidget.css"

], 

function(MyWidget) {

// 你可以对MyWidget进行操作

// 这里没有对这个CSS文件引用,因为不需要;

// 我们只需要它已经加载到页面上了

}

});

本网站使用的PrismJS语法高亮脚本就是延迟加载的。当所有的资源都加载后,回调函数就会触发,我可在回调函数里加载它。非常有用!

CSS鼠标指针事件

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

.disabled { pointer-events: none; }

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

以上就是个人总结的5种javascript和CSS进行交互的方法,大家如果有更好的,请告之,本文将持续更新

Javascript 相关文章推荐
运用jquery实现table单双行不同显示并能单行选中
Jul 25 Javascript
浏览器窗口加载和大小改变事件示例
Feb 27 Javascript
jquery通过closest选择器修改上级元素的方法
Mar 17 Javascript
javascript判断图片是否加载完成的方法推荐
May 13 Javascript
jQuery中的siblings()是什么意思(推荐)
Dec 29 Javascript
基于代数方程库Algebra.js解二元一次方程功能示例
Jun 09 Javascript
Javacript中自定义的map.js  的方法
Nov 26 Javascript
JS实现的ajax和同源策略(实例讲解)
Dec 01 Javascript
vue的过滤器filter实例详解
Sep 17 Javascript
vue组件实践之可搜索下拉框功能
Nov 25 Javascript
vue实现div拖拽互换位置
Jul 29 Javascript
jquery实现聊天机器人
Feb 08 jQuery
HTML,CSS,JavaScript速查表推荐
Dec 02 #Javascript
javascript函数声明和函数表达式区别分析
Dec 02 #Javascript
javascript常用方法汇总
Dec 02 #Javascript
js时间日期格式化封装函数
Dec 02 #Javascript
JavaScript基础语法、dom操作树及document对象
Dec 02 #Javascript
JavaScript基础知识学习笔记
Dec 02 #Javascript
Js 正则表达式知识汇总
Dec 02 #Javascript
You might like
php5 and xml示例
2006/11/22 PHP
PHP读取CURL模拟登录时生成Cookie文件的方法
2014/11/04 PHP
PHP结合Ueditor并修改图片上传路径
2016/10/16 PHP
PHP实现实时生成并下载超大数据量的EXCEL文件详解
2017/10/23 PHP
Thinkphp 框架扩展之数据库驱动常用方法小结
2020/04/23 PHP
jQuery 源码分析笔记(2) 变量列表
2011/05/28 Javascript
formvalidator验证插件中有关ajax验证问题
2013/01/04 Javascript
javascript实现tabs选项卡切换效果(扩展版)
2013/03/19 Javascript
防止xss和sql注入:JS特殊字符过滤正则
2013/04/18 Javascript
jquery自定义下拉列表示例
2014/04/25 Javascript
什么是MEAN?JavaScript编程中的MEAN是什么意思?
2014/12/18 Javascript
javascript如何写热点图
2015/12/08 Javascript
jQuery Validate让普通按钮触发表单验证的方法
2016/12/15 Javascript
vue中如何实现变量和字符串拼接
2017/06/19 Javascript
vue2.0开发入门笔记之.vue文件的生成和使用
2017/09/19 Javascript
Angular实现预加载延迟模块的示例
2017/10/12 Javascript
AngularJS中controller控制器继承的使用方法
2017/11/03 Javascript
微信小程序支付PHP代码
2018/08/23 Javascript
vuex实现及简略解析(小结)
2019/03/01 Javascript
如何通过JS实现转码与解码
2020/02/21 Javascript
js实现数据导出为EXCEL(支持大量数据导出)
2020/03/31 Javascript
[03:46]显微镜下的DOTA2第七期——满血与残血
2014/06/20 DOTA
python django 访问静态文件出现404或500错误
2017/01/20 Python
解决出现Incorrect integer value: '' for column 'id' at row 1的问题
2017/10/29 Python
pandas每次多Sheet写入文件的方法
2018/12/10 Python
Python多线程threading模块用法实例分析
2019/05/22 Python
python的time模块和datetime模块实例解析
2019/11/29 Python
Python脚本打包成可执行文件过程解析
2020/10/20 Python
美国伊甸园兄弟种子公司:Eden Brothers
2018/07/01 全球购物
英国和国际包裹递送:ParcelCompare
2019/08/26 全球购物
乌克兰移动电子产品和相关配件的在线商店:iTMag
2020/03/16 全球购物
法学专业大学生实习自我鉴定
2014/10/05 职场文书
教育合作协议范本
2014/10/17 职场文书
在校生证明
2015/06/17 职场文书
2016年先进教师个人事迹材料
2016/02/26 职场文书
导游词之沈阳植物园
2019/11/30 职场文书