JavaScript 操作CSS

JavaScript 操作CSS

关于CSS的介绍不是本文的内容范围,本文主要介绍如何使用JavaScript操作CSS。

1. 使用JavaScript操作Inline Styles

所有的文档元素都有style属性,我们可以通过直接操作style属性来修改相关元素的样式。

需要注意的是style属性的值并不是一个string对象,而是一个CSSStyleDeclaration对象。

我们可以通过如下方式设置style属性的值。

e.style.fontSize = "24pt"; //由于JavaScript变量不允许使用连字符,所以设置相关属性时需要将该属性名的连字符移除,并且大写属性名非首单词首字母。font-size ==> fontSize。
e.style.color = "blue";e.style.cssFloat = "right" //由于float是JavaScript的关键字,所以css float属性加了css前缀

设置为CSSStyleDeclaration对象属性的值只能为string。

有时,我们想获得Inline Styles的字符串形式,可以通过CSSStyleDeclaration对象的cssText属性获得。

e.style.cssText

2. CSS动画效果的制作

一个经常使用JavaScript操作CSS的场景就是制作一些动画效果。这可以通过定时器动态修改一些css样式的值来实现。

以下为一个产生震动效果的JavaScript函数。

// shake the specified element
function shake(e, oncomplete, distance, time) {

    if (typeof e === "string") e = document.getElementById(e);
    if (!time) time = 500;
    if (!distance) distance = 5;

    var originalStyle = e.style.cssText;
    e.style.position = "relative";
    var start = (new Date()).getTime();
    animate();

    function animate() {
        var now = (new Date()).getTime();
        var elapsed = now - start;
        var fraction = elapsed / time;

        if (fraction < 1) {

            var x = distance * Math.sin(fraction * 4 * Math.PI);
            e.style.left = x + "px";

            setTimeout(animate, Math.min(25, time - elapsed));

        } else {
            e.style.cssText = originalStyle;
            if (oncomplete) oncomplete(e);
        }
    }
}

在最新的CSS3中,我们可以直接使用CSS实现一些动画效果而无需JavaScript的帮助。

3. 查询元素的Computed Styles

我们通过style属性得到的是元素的内联样式,并不是该元素的实际应用的样式。

元素实际的样式是由多级样式表按照指定的优先级计算出来的。我们可以通过window对象的getComputedStyle方法得到元素的实际样式。

var title = document.getElementById("sectionTitle");
var titleStyles = window.getComputedStyle(element, null);

该方法接受两个参数,一个是元素对象,另一个用于传入CSS伪类(:first-line...),通常出入null值或者空字符串。

该方法返回一个只读的CSSStyleDeclaration对象。并且该对象的cssText属性是undefined。

IE8以前包括IE8并不支持该函数,可以通过元素的currentStyle部分代替该方法,但是二者有些许不同,这里不再详述。

4. 操作CSS Classes

通过CSS Class, 我们可以灵活的组织页面样式,实现页面样式的重用与模块化。

在JavaScript中,我们通过元素的className属性获得为元素指定的Classes。该值是一个字符串,class之间用空格分开。

在HTML5中,为元素定义了一个classList属性,该属性返回一个只读的类数组对象DOMTokenList。该对象包含了操作

class的方法add,remove,toggle,contains。And the DOMTokenList is a "live" representation of the element‘s set of classes。

我们下面写了一个函数来返回一个对象,用来模拟DOMTokenList API。

//get the class list of a element
function classList(e) {
    if (e.classList) return e.classList;
    else return new CSSClassList(e);
}

function CSSClassList(e) {
    this.e = e;
}

CSSClassList.prototype.contains = function (c) {

    //Check that c is a valid class name
    if (c.length === 0 || c.indexOf(" ") != -1)
        throw new Error("Invalid class name : ‘" + c + "‘");

    var classes = this.e.className;
    if (!classes) return false;

    if (classes === c) return true;

    return classes.search("\\b" + c + "\\b") != -1;
};

CSSClassList.prototype.add = function (c) {
    if (this.contains(c)) return;
    var classes = this.e.className;

    if (classes && classes[classes.length-1] != " ")
    {
        c = " " + c;
    }

    this.e.className += c;
}

CSSClassList.prototype.remove = function (c) {

    if (c.length === 0 || c.indexOf(" ") != -1)
        throw new Error("Invalid class name: ‘" + c + "‘");

    var pattern = new RegExp("\\b" + c + "\\b\\s*", "g");
    this.e.className = this.e.className.replace(pattern, "");
}

CSSClassList.prototype.toggle = function (c) {
    if (c.contains(c)) {
        this.remove(c);
        return false;
    } else {
        this.add(c);
        return true;
    }
}

CSSClassList.prototype.toString = function (c) {
    return this.e.className;
}

CSSClassList.prototype.toArray = function (c) {
    return this.e.className.match(/\b\w+\b/g) || [];
}

5. 操作样式表

未完待续。。。

JavaScript 操作CSS

时间: 2024-11-04 16:29:36

JavaScript 操作CSS的相关文章

Javascript 操作CSS 学习笔记

页面往往是动态变化的,我们经常需要在脚本里对元素的样式进行操作,刚学习js的时候大家都知道通过style属性设置css样式相关的属性,但有时候也想先获取样式,结果发现通过style取到的值是空,这就需要我们对这些概念足够熟练. 一.设置样式 每个dom元素都具有一个style属性,与平常的属性不一样,style的值是一个CSSStyleDeclaration对象,这个对象的属性代表了该对应元素的内联样式. 注意上面说的是内联样式,我们知道,在<link>内引用的样式称为外部样式,在<st

javascript操作CSS样式表

1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html> 3 <head> 4 <meta charset="UTF-8" /> 5 <!--meta http-equiv="x

javascript操作css实现弹出对话框

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ""><html xmlns=""><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>无标题文档</ti

javascript 操作 css Rule

1 //add addCssRule('.bcd',{'color':'red','font-weight':'bold','font-size':'12px'},document.styleSheets[1]); 2 function addCssRule(selector,styles,styleSheet,index){ 3 var sheets = styleSheet instanceof Array ? styleSheet : [styleSheet], 4 style = '',

如何使用JavaScript控制CSS Animations(动画)和Transitions(过渡)

Zach邮件跟我说,上Stack Overflow这类的论坛,他经常碰到一些关于JavaScript控制CSS 动画的问题,又提供给我几个例子.我很久就打算写一些关于这方面的文章,所以很高兴让Zach提出来并促使我写了这个教程. 有时候WEB开发人员认为CSS的动画比JavaScript的动画更难理解.虽然CSS动画有其局限性,但它的性能比大多数JavaScript库更加高效,因为它可以借助硬件加速啊!其效果绝对可以超出我们的预期. CSS animations和transitions再加上点J

通过JS操作CSS

动态效果如图所示: 第一种实现方法: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-e

使用javascript和css模拟帧动画的几种方法浅析

我们平时在开发前端页面的时候,经常会播放一段帧序列.这段帧序列就像gif图片那样,反复循环播放.那大家可能会说,直接用gif图片就好了,干嘛还去模拟呢?那是因为要做得更加灵活,我们要做到以下几点: 1.我们希望这段帧动画只循环播放所指定的次数. 2.我们希望帧动画结束的瞬间执行某种操作.这个在游戏中大量存在. 3.我们想自如的控制播放的速度. 4.我们想尽可能让这个帧动画的实现方式兼容大部分浏览器,在移动和pc端都能运行良好. 有了以上四点要求,那就不是gif图片所能完成的了.下面,我们先探讨有

javascript操作html元素CSS属性

下面先记录一下JS控制CSS所使用的方法. 1.使用javascript更改某个css class的属性... <style type="text/css"> .orig { display: none; } </style> 你想要改变把他的display属性由none改为inline. 解决办法: 在IE里: document.styleSheets[0].rules[0].style.display = "inline"; 在firef

轻松学习JavaScript二十四:DOM编程学习之操作CSS样式(一)

CSS样式作为HTML的辅助,可以增强页面的显示效果.前面学了DOM操作HTML,因此也要学DOM操作CSS 样式的方法.在学习CSS的时候,已经知道了CSS插入到HTML文档有三种情况,分别为:行内式,内嵌式和外联式 (这是我们最常用的).下面就来看怎么操作这三种情况: 一操作行内式 先来写一个HTML文档: <span style="font-size:18px;"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0