jQuery无刷新切换主题皮肤实例讲解


Posted in Javascript onOctober 21, 2015

主题皮肤切换功能在很多网站和系统中应用,用户可以根据此功能设置自己喜欢的主题颜色风格,增强了用户体验。本文将围绕如何使用jQuery实现点击无刷新切换主题皮肤功能。

jQuery无刷新切换主题皮肤实例讲解

实现该功能的原理就是通过点击定义的主题样式,改变页面当前引用的主题CSS文件,并且将当前的主题样式写入cookie中或者写入数据库中,以便下次该用户重新访问页面时,调用的就是上次设置好的主题样式。
准备主题皮肤样式
首先,我准备了三个样式表CSS文件,分别是三种风格的主题皮肤,将其引入页面,放置在页面的<head>之间。

<link title="default" rel="stylesheet" type="text/css" href="css/default.css" /> 
<link title="blue" rel="stylesheet" type="text/css" href="css/blue.css" disabled="disabled" /> 
<link title="brown" rel="stylesheet" type="text/css" href="css/brown.css" disabled="disabled" />

注意我给每个<link>添加了title属性,是由用处的,另外我禁用了第2个和第3个CSS文件,就是默认起作用的是第1个CSS文件。
XHTML

<ul id="styles"> 
 <li id="default">经典</li> 
 <li id="blue">淡蓝</li> 
 <li id="brown">棕色</li> 
</ul>

三种主题风格用于点击切换,注意我分别给每个li加了id属性。
CSS

ul#styles{margin-top:10px} 
ul#styles li{float:left; width:50px; height:40px; line-height:40px; padding:2px; 
margin-left:10px; border:1px solid #fff; text-align:center; color:#fff; cursor:pointer} 
ul#styles li.cur{border:1px solid #369; background-image:url(images/selected.gif); 
background-repeat:no-repeat; background-position:4px 32px} 
ul#styles li#default{background-color:#162934;} 
ul#styles li#blue{background-color:#90c5e7} 
ul#styles li#brown{background-color:#601f00}

用CSS渲染XHTML,其中ul#styles li.cur是指当前主题选中下的样式,我用一个小勾表示当前选中的主题。
jQeury
首先我们要引入jquery库和jquery.cookie插件。jquery.cookie插件为jQuery提供了强大的cookie操作功能,你不用去写复杂的原生的javascript,只管直接调用该插件就行。关于该插件的使用,请阅读本站文章:

<script type="text/javascript" src="js/jquery.js"></script> 
<script type="text/javascript" src="js/jquery.cookie.js"></script>

接下来,当用户点击切换选择主题时,要发生以下动作:获取选择的主题(id),查看引用的CSS文件,如果发现其title属性值正好与当前选中的主题id值相等,则应用该主题CSS文件,同时将其他引用的CSS文件禁用,并且将当前选中的主题写入cookie中,设置cookie过期时间,最后将当前选中的主题按钮(li)设置为当前选中状态。具体看下面的代码:

$("#styles li").click(function(){ 
 var style = $(this).attr("id"); 
 $("link[title='"+style+"']").removeAttr("disabled"); 
 $("link[title!='"+style+"']").attr("disabled","disabled"); 
 $.cookie("mystyle",style,{expires:30}); 
 $(this).addClass("cur").siblings().removeClass("cur"); 
});

注意,在本例中我将选中的样式保存在用户cookie中,cookie名称为”mystyle“,值为当前选中的主题值,过去时间为30天,即:expires:30
接着需要做的是页面载入时,读取主题cookie值,如果主题cookie存在则调用cookie值对应的主题样式CSS文件,并且设置当前主题按钮状态为选中状态,反之,则调用默认样式。代码如下:

var cookie_style = $.cookie("mystyle"); 
if(cookie_style==null){ 
 $("link[title='default']").removeAttr("disabled"); 
 $("#styles li#default").addClass("cur"); 
}else{ 
 $("link[title='"+cookie_style+"']").removeAttr("disabled"); 
 $("#styles li[id='"+cookie_style+"']").addClass("cur"); 
 $("link[title!='"+cookie_style+"']").attr("disabled","disabled"); 
}

将以上两段代码加入到$(function(){})中,工作到此完成。
值得一提的是,本文应用的cookie记录用户所选择设置的主题皮肤样式,但是当cookie到期或者用户清除了浏览器的COOKIE,亦或者用户换用其他浏览器浏览时,当前设置的主题就会失效。为了让用户永久保存选择的主题样式,必须将所选的主题与用户信息对应,并写入数据库,下次该用户登录就可以直接读取主题,当然,该方法应用在有用户权限范围的系统,如后台管理系统,个人中心等。

以上就是本文的全部内容,内容很详细,方便读者理解阅读,希望大家能有所收获吧!

Javascript 相关文章推荐
jQuery 表单验证扩展(三)
Oct 20 Javascript
十个迅速提升JQuery性能让你的JQuery跑得更快
Dec 10 Javascript
jquery删除数据记录时的弹出提示效果
May 06 Javascript
javascript动态设置样式style实例分析
May 13 Javascript
基于jQuery插件实现环形图标菜单旋转切换特效
May 15 Javascript
JS实现光滑展开合拢的菜单效果代码
Sep 16 Javascript
JQuery zClip插件实现复制页面内容到剪贴板
Nov 02 Javascript
标准的js无缝滚动效果
Aug 30 Javascript
Angularjs 设置全局变量的方法总结
Oct 20 Javascript
开源免费天气预报接口API及全国所有地区代码(国家气象局提供)
Dec 26 Javascript
深入理解vue-loader如何使用
Jun 06 Javascript
ES6扩展运算符和rest运算符用法实例分析
May 23 Javascript
JavaScript操作HTML元素和样式的方法详解
Oct 21 #Javascript
13个PHP函数超实用
Oct 21 #Javascript
JavaScript对HTML DOM使用EventListener进行操作
Oct 21 #Javascript
JavaScript对象数组的排序处理方法
Oct 21 #Javascript
Javascript刷新窗口方法小结
Oct 21 #Javascript
JavaScript简单遍历DOM对象所有属性的实现方法
Oct 21 #Javascript
详解JavaScript操作HTML DOM的基本方式
Oct 21 #Javascript
You might like
纯PHP生成的一个树叶图片画图例子
2014/04/16 PHP
php实现的css文件背景图片下载器代码
2014/11/11 PHP
PHP获取youku视频真实flv文件地址的方法
2014/12/23 PHP
php动态绑定变量的用法
2015/06/16 PHP
PHP使用星号隐藏用户名,手机和邮箱的实现方法
2016/09/22 PHP
Paypal实现循环扣款(订阅)功能
2017/03/23 PHP
用 javascript 实现的点击复制代码
2007/03/24 Javascript
javascript this用法小结
2008/12/19 Javascript
zeroclipboard 单个复制按钮和多个复制按钮的实现方法
2014/06/14 Javascript
JS实现状态栏跑马灯文字效果代码
2015/10/24 Javascript
js实现对ajax请求面向对象的封装
2016/01/08 Javascript
jQuery Easyui快速入门教程
2016/08/21 Javascript
AngularJS 限定$scope的范围实例详解
2017/06/23 Javascript
微信、QQ、微博、Safari中使用js唤起App
2018/01/24 Javascript
JavaScript canvas仿代码流瀑布
2020/02/10 Javascript
node+vue实现文件上传功能
2020/05/28 Javascript
vue+vant实现购物车全选和反选功能
2020/11/17 Vue.js
Vue.js桌面端自定义滚动条组件之美化滚动条VScroll
2020/12/01 Vue.js
Vue $attrs &amp; inheritAttr实现button禁用效果案例
2020/12/07 Vue.js
基于Django filter中用contains和icontains的区别(详解)
2017/12/12 Python
Python下调用Linux的Shell命令的方法
2018/06/12 Python
python3实现域名查询和whois查询功能
2018/06/21 Python
python函数与方法的区别总结
2019/06/23 Python
int在python中的含义以及用法
2019/06/27 Python
Python安装与卸载流程详细步骤(图解)
2020/02/20 Python
Django实现后台上传并显示图片功能
2020/05/29 Python
Keras预训练的ImageNet模型实现分类操作
2020/07/07 Python
项目开发计划书
2014/01/09 职场文书
职工运动会邀请函
2014/02/02 职场文书
四风存在的原因分析
2014/02/11 职场文书
初中高效课堂实施方案
2014/02/26 职场文书
2014年党务公开方案
2014/05/08 职场文书
抗洪救灾先进集体事迹材料
2014/05/26 职场文书
团日活动总结格式
2015/05/11 职场文书
2016继续教育研修日志
2015/11/13 职场文书
SpringBoot前端后端分离之Nginx服务器下载安装过程
2022/08/14 Servers