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中的对象和原型(二)
Aug 12 Javascript
jquery把int类型转换成字符串类型的方法
Oct 07 Javascript
BootStrap中Table分页插件使用详解
Oct 09 Javascript
浅谈Javascript事件对象
Feb 05 Javascript
对于js垃圾回收机制的理解
Sep 14 Javascript
微信禁止下拉查看URL的处理方法
Sep 28 Javascript
JavaScript程序设计高级算法之动态规划实例分析
Nov 24 Javascript
vue中各选项及钩子函数执行顺序详解
Aug 25 Javascript
解决layui数据表格排序图标被超出的表头挤出去的问题
Sep 19 Javascript
vue 中url 链接左边的小图标更改问题
Dec 30 Javascript
Vue v-model组件封装(类似弹窗组件)
Jan 08 Javascript
如何在vue中使用jointjs过程解析
May 29 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动态创建Flash动画
2006/10/09 PHP
CI框架中cookie的操作方法分析
2014/12/12 PHP
javascript第一课
2007/02/27 Javascript
基于JQuery制作的产品广告效果
2010/12/08 Javascript
Javascript拓展String方法小结
2013/07/08 Javascript
MyEclipse取消验证Js的两种方法
2013/11/14 Javascript
jQuery 取值、赋值的基本方法整理
2014/03/31 Javascript
JavaScript组合拼接字符串的效率对比测试
2014/11/06 Javascript
详解Vue2.x-directive的学习笔记
2017/07/17 Javascript
五步轻松实现JavaScript HTML时钟效果
2020/03/25 Javascript
对Vue- 动态元素属性及v-bind和v-model的区别详解
2018/08/27 Javascript
详解微信小程序之scroll-view的flex布局问题
2019/01/16 Javascript
JavaScript实现获取两个排序数组的中位数算法示例
2019/02/26 Javascript
Bootstrap实现模态框效果
2019/09/30 Javascript
JS实现的雪花飘落特效示例
2019/12/03 Javascript
JavaScript享元模式原理与用法实例详解
2020/03/09 Javascript
vue-router的hooks用法详解
2020/06/08 Javascript
vue实现点击按钮切换背景颜色的示例代码
2020/06/23 Javascript
在Python中进行自动化单元测试的教程
2015/04/15 Python
在Python中使用判断语句和循环的教程
2015/04/25 Python
利用python爬取斗鱼app中照片方法实例
2017/12/03 Python
python基于twisted框架编写简单聊天室
2018/01/02 Python
Python Json序列化与反序列化的示例
2018/01/31 Python
Python实现的微信支付方式总结【三种方式】
2019/04/13 Python
对Django 中request.get和request.post的区别详解
2019/08/12 Python
Python使用py2neo操作图数据库neo4j的方法详解
2020/01/13 Python
python json load json 数据后出现乱序的解决方案
2020/02/27 Python
Python Switch Case三种实现方法代码实例
2020/06/18 Python
python实现每天自动签到领积分的示例代码
2020/08/18 Python
Jacadi Paris英国官网:法国童装品牌
2019/08/09 全球购物
荷兰网上药店:Drogisterij.net
2019/09/03 全球购物
银行学习十八大感想
2014/01/11 职场文书
安全口号大全
2014/06/21 职场文书
国庆庆典邀请函
2015/02/02 职场文书
压缩Redis里的字符串大对象操作
2021/06/23 Redis
MySQL数据库索引的最左匹配原则
2021/11/20 MySQL