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 相关文章推荐
javascript 流畅动画实现原理
Sep 08 Javascript
jQuery实战之仿淘宝商城左侧导航效果
Apr 12 Javascript
网页实时显示服务器时间和javscript自运行时钟
Jun 09 Javascript
JavaScript声明变量名的语法规则
Jul 10 Javascript
AngularJS中的JSONP实例解析
Dec 01 Javascript
JS简单验证上传文件类型的方法
Apr 17 Javascript
Vue2单一事件管理组件通信
May 09 Javascript
Vue学习之路之登录注册实例代码
Jul 06 Javascript
JavaScript实现JSON合并操作示例【递归深度合并】
Sep 07 Javascript
bootstrap-table formatter 使用vue组件的方法
May 09 Javascript
解决vue单页面应用中动态修改title问题
Jun 09 Javascript
使用easyui从servlet传递json数据到前端页面的两种方法
Sep 05 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中将时间差转换为字符串提示的实现代码
2011/08/08 PHP
基于flush()不能按顺序输出时的解决办法
2013/06/29 PHP
使用swoole扩展php websocket示例
2014/02/13 PHP
php中get_defined_constants函数用法实例分析
2015/05/12 PHP
百度工程师讲PHP函数的实现原理及性能分析(一)
2015/05/13 PHP
php类自动加载器实现方法
2015/07/28 PHP
Symfony2学习笔记之插件格式分析
2016/03/17 PHP
PHP创建XML的方法示例【基于DOMDocument类及SimpleXMLElement类】
2019/09/10 PHP
多广告投放代码 推荐
2006/11/13 Javascript
JS中不为人知的五种声明Number的方式简要概述
2013/02/22 Javascript
js 控制页面跳转的5种方法
2013/09/09 Javascript
关于jquery中全局函数each使用介绍
2013/12/10 Javascript
js获取当前年月日-YYYYmmDD格式的实现代码
2016/06/01 Javascript
微信小程序实现左右联动的实战记录
2018/07/05 Javascript
angularjs实现对表单输入改变的监控(ng-change和watch两种方式)
2018/08/29 Javascript
vue-cli 2.*中导入公共less文件的方法步骤
2018/11/22 Javascript
微信小程序顶部导航栏滑动tab效果
2019/01/28 Javascript
浅谈Vue.js 关于页面加载完成后执行一个方法的问题
2019/04/01 Javascript
[02:07]TI9显影之尘系列 - Vici Gaming
2019/08/20 DOTA
pyramid配置session的方法教程
2013/11/27 Python
python实现ipsec开权限实例
2014/11/11 Python
python实现redis三种cas事务操作
2017/12/19 Python
Python日期时间对象转换为字符串的实例
2018/06/22 Python
Python实用技巧之列表、字典、集合中根据条件筛选数据详解
2018/07/11 Python
Python字符编码转码之GBK,UTF8互转
2020/02/09 Python
Python新手如何理解循环加载模块
2020/05/29 Python
英国最大的高品质珠宝和手表专家:Goldsmiths
2017/03/11 全球购物
味多美官网:蛋糕订购,100%使用天然奶油
2017/11/10 全球购物
3个CCIE对一个工程师的面试题
2012/05/06 面试题
linux面试题参考答案(11)
2016/11/26 面试题
应届毕业生求职信范文
2014/05/08 职场文书
2015年化验室工作总结
2015/04/23 职场文书
向雷锋同志学习倡议书
2015/04/27 职场文书
jQuery class属性操作addClass()与removeClass()、hasClass()、toggleClass()
2021/03/31 jQuery
HTML通过表单实现酒店筛选功能
2021/05/18 HTML / CSS
JavaScript实现队列结构过程
2021/12/06 Javascript