jQuery 实现多页面换肤

https://bbs.csdn.net/topics/391856515

换肤有很多种,这里使用选择皮肤时,jQuery动态加载css,并且保存到cookie中,以实现下一次登陆时,自动使用当前皮肤。
多页面换肤其实和单页面换肤差不多,只需要把换肤函数作为一个公共函数,每个页面调用。

具体步骤(看代码):
简单做了两个页面index.html,base.html,以实现在其中一个切换皮肤后,另外一个页面也可以自动更换皮肤。
index.html:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link href="css/style1.css" rel="stylesheet" type="text/css">
    <script src="js/jquery-2.0.3.min.js"></script>
    <script src="js/jquery.cookie.js"></script>

    <title>换肤效果</title>
</head>
<body>
    <div class="wap">
        <span>我是页面1</span>
        <ul>
            <li value="1">黄色</li>
            <li value="2">绿色</li>
            <li value="3">蓝色</li>
        </ul>
    </div>
<h2><a href="base.html">转到base.html</a></h2>
    <script src="js/app.js"></script>
</body>
</html>

base.html:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script src="js/jquery-2.0.3.min.js"></script>
    <script src="js/jquery.cookie.js"></script>

    <title>换肤效果</title>
</head>
<body>
<div class="wap">
    <span>我是页面2</span>
    <ul>
        <li value="1">黄色</li>
        <li value="2">绿色</li>
        <li value="3">蓝色</li>
    </ul>
    <button>确定</button>
</div>
<h2><a href="index.html">转到index.html</a></h2>
<script src="js/app.js"></script>
</body>
</html>

这里只是实现功能,所以样式很简单,只设置背景颜色的更换
style1.css:
.wap{
     80%;
    height: 400px;
    margin: 20px auto;
   yellow;
}
ul{
    float: right;
}
ul li{
    list-style: none;
}
ul li:hover{
    gainsboro;
}
ul li .selected{
    #e0e0e0;
}

style2.css:
.wap{
     80%;
    height: 400px;
    margin: 20px auto;
   green;
}
ul{
    float: right;
}
ul li{
    list-style: none;
}
ul li:hover{
    gainsboro;
}
ul li .selected{
    #e0e0e0;
}

style3.css:
.wap{
     80%;
    height: 400px;
    margin: 20px auto;
    blue;
}
ul{
    float: right;
}
ul li{
    list-style: none;
}
ul li:hover{
    gainsboro;
}
ul li .selected{
    #e0e0e0;
}

最主要就是js部分,由于功能比较简单,js比较少,我把所有的js都放在一个js文件了
app.js:
/*选择皮肤*/
+function(){
    /*选择皮肤事件*/
    $(".wap").find("ul").find("li").on('click', function () {
        $(this).addClass("selected");/*给当前主题添加selected样式*/
        $(this).siblings().removeClass("selected");
        console.log("gjafsdsa");
        change_theme($(this).val());//改变主题
    });
    console.log("aaa");
    /*读取cookie*/
    var change_theme_id = $.cookie("change_theme_id");
    /*如果cookie 存在 则使用cookie保存的样式*/
    if(change_theme_id){
        change_theme(change_theme_id);
    }
    /* 改变皮肤函数 */
    function change_theme(change_theme_id){
        /*加载css*/
        $("<link>").attr({rel:"stylesheet",
                            type:"text/css",
                            href:"css/style"+change_theme_id+".css"})
            .appendTo("head");
        /*保存到cookie中,保存100天*/
        $.cookie("change_theme_id",change_theme_id,{expires:100});
    }
}();

值得注意的是:
我是使用cookie记录选择设置的主题皮肤样式,但是当cookie到期或者清除了浏览器的COOKIE,亦或者换用其他浏览器浏览时,当前设置的主题就会失效。为了让用户永久保存选择的主题样式,必须将所选的主题与用户信息对应,并写入数据库,下次该用户登录就可以直接读取主题,当然,该方法应用在有用户权限范围的系统,如后台管理系统,个人中心等。

到了这里,多页面换肤也就完成了,喜欢的小伙伴赶快试试吧

原文地址:https://www.cnblogs.com/Ao-min/p/13842225.html