样式表切换-网页换肤

参考图书:

《JavaScript基础教程(第8版)》  http://download.csdn.net/detail/qq_26437925/9428156

本例将样式表切换和cookie结合起来,可以满足个性化的样式定制

项目:

css/style_1.css

#head{
    color: #f00;
}

css/style_2.css

#head{
    color: #0f0;
}

css/style_3.css

#head{
    color: #00f;
}
js/changeStyle.js

window.onload = initStyle;
window.onunload = unloadStyle; // 网页卸载时存储cookie
// 初始化央视表
function initStyle(){
    var thisCookie = cookieVal("style"); // 读cookie
    if (thisCookie) {
        var title = thisCookie;
    }
    else {
        var title = getPreferredStylesheet();
    }
    setActiveStylesheet(title);
    // 改变样式的button按钮事件
    var allButtons = document.getElementsByTagName("input");
    for (var i=0; i<allButtons.length; i++) {
        if (allButtons[i].type == "button") {
            allButtons[i].onclick = setActiveStylesheet;
        }
    }
}
// 获取默认的stylesheet 就是  rel="stylesheet" 而不是 rel="alternate stylesheet"
function getPreferredStylesheet() {
    var thisLink, relAttribute;
    var linksFound = document.getElementsByTagName("link");
    for (var i=0; i<linksFound.length; i++) {
        thisLink = linksFound[i];
        relAttribute = thisLink.getAttribute ("rel");
        if (relAttribute.indexOf("style") > -1 && relAttribute.indexOf("alt") == -1 &&
            thisLink.getAttribute("title")) {
            return thisLink.getAttribute ("title");
        }
    }
    return "";
}
// 得到当前作用的stylesheet
function getActiveStylesheet() {
    var thisLink;
    var linksFound = document.getElementsByTagName("link");
    for (var i=0; i<linksFound.length; i++) {
        thisLink = linksFound[i];
        if (thisLink.getAttribute("rel").indexOf("style") > -1
            && thisLink.getAttribute("title")
            &&!thisLink.disabled) {
            return thisLink.getAttribute("title");
        }
    }
    return "";
}
function setActiveStylesheet(inVal) {
    var thisLink;
    var linksFound = document.getElementsByTagName("link"); // 得到两个样式表
    if (inVal) {
        if (typeof inVal == "string") {
            var title = inVal;
        }
        else{
            var title = inVal.target.id;
        }
    }
    else {
        var title = window.event.srcElement.id;
    }
    for (var i=0; i<linksFound.length; i++) {
        thisLink = linksFound[i];
        if (thisLink.getAttribute("rel").indexOf("style") > -1 && thisLink.getAttribute("title")) {
            thisLink.disabled = true;
            if (thisLink.getAttribute("title") == title) {
                thisLink.disabled = false;
            }
        }
    }
}
// 根据cookieName读取相应的cookie值
function cookieVal(cookieName) {
    var thisCookie = document.cookie.split("; ");
    for (var i=0; i<thisCookie.length; i++) {
        if (cookieName == thisCookie[i].split("=")[0]) {
            return thisCookie[i].split("=")[1];
        }
    }
    return "";
}
// 设置样式 为当前起作用的样式 并且 cookie时间为一年之后
function unloadStyle() {
    var expireDate = new Date();
    expireDate.setYear(expireDate.getFullYear()+1);
    document.cookie ="style=" +getActiveStylesheet()+";expires=" + expireDate.toGMTString()
        + ";path=/";
}

test.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="gbk">
    <title>改变样式实例</title>
    <meta charset="utf-8">
    <link href="css/style_1.css" rel="stylesheet" title="default">
    <link href="css/style_2.css" rel="alternate stylesheet" title="style2">
    <link href="css/style_3.css" rel="alternate stylesheet" title="style3">
    <script type="text/javascript" src="js/changeStyle.js"></script>
</head>
<body>
    <div id="head">
        <p>两个stylesheet 各自的title 与相应按钮的id值相同</p>
        <p>加入了cookie , 页面加载的时候从cookie中读取样式值 style=样式名称</p>
        <p>按钮点击时 设置相应的stylesheet disable属性已确定采用哪个样式</p>
        <p></p>
    </div>
    <input type="button" class="typeBtn" value="样式1" id="default">
    <br><br>
    <input type="button" class="typeBtn2" value="样式2" id="style2">
    <br><br>
    <input type="button" class="typeBtn3" value="样式3" id="style3">
</body>
</html>


运行截图:

样式表切换-网页换肤_第1张图片样式表切换-网页换肤_第2张图片样式表切换-网页换肤_第3张图片

你可能感兴趣的:(样式表切换-网页换肤)