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中dialog属性小记
Sep 03 Javascript
Jquery实现的tab效果可以指定默认显示第几页
Oct 16 Javascript
iframe子页面与父页面在同域或不同域下的js通信
May 07 Javascript
基于JavaScript实现弹出框效果
Feb 19 Javascript
Bootstrap网格系统详解
Apr 26 Javascript
Bootstrap框架动态生成Web页面文章内目录的方法
May 12 Javascript
js输入框使用正则表达式校验输入内容的实例
Feb 12 Javascript
jQuery快速高效制作网页交互特效
Feb 24 Javascript
微信小程序实现下载进度条的方法
Dec 08 Javascript
Node.js搭建小程序后台服务
Jan 03 Javascript
深入理解node.js http模块
Jan 24 Javascript
vue中的过滤器实例代码详解
Jun 06 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&amp;java(一)
2006/10/09 PHP
使用URL传输SESSION信息
2015/07/14 PHP
理解php依赖注入和控制反转
2016/05/11 PHP
学习PHP session的传递方式
2016/06/15 PHP
PHP面向对象程序设计之对象生成方法详解
2016/12/02 PHP
thinkPHP框架动态配置用法实例分析
2018/06/14 PHP
javascript入门·图片对象(无刷新变换图片)\滚动图像
2007/10/01 Javascript
基于NodeJS的前后端分离的思考与实践(五)多终端适配
2014/09/26 NodeJs
JavaScript闭包实例详解
2016/06/03 Javascript
基于rem的移动端响应式适配方案(详解)
2017/07/07 Javascript
原生js实现form表单序列化的方法
2018/08/02 Javascript
详解JS浏览器事件循环机制
2019/03/27 Javascript
jQuery实现条件搜索查询、实时取值及升降序排序的方法分析
2019/05/04 jQuery
jQuery zTree树插件的使用教程
2019/08/16 jQuery
vue在线动态切换主题色方案
2020/03/26 Javascript
Element Backtop回到顶部的具体使用
2020/07/27 Javascript
Python中map和列表推导效率比较实例分析
2015/06/17 Python
详解Python Socket网络编程
2016/01/05 Python
Python中使用OpenCV库来进行简单的气象学遥感影像计算
2016/02/19 Python
Python编写Windows Service服务程序
2018/01/04 Python
python实现m3u8格式转换为mp4视频格式
2018/02/28 Python
python正则表达式之对号入座篇
2018/07/24 Python
使用Python实现一个栈判断括号是否平衡
2018/08/23 Python
python根据文章标题内容自动生成摘要的实例
2019/02/21 Python
python读取图片的方式,以及将图片以三维数组的形式输出方法
2019/07/03 Python
Python 日志logging模块用法简单示例
2019/10/18 Python
Python脚本实现监听服务器的思路代码详解
2020/05/28 Python
Python pip 常用命令汇总
2020/10/19 Python
如何使用Pytorch搭建模型
2020/10/26 Python
CSS实现限制字数功能当对象内文本溢出时显示省略标记
2014/08/20 HTML / CSS
中东奢侈品市场:Coveti
2019/05/12 全球购物
在线实验室测试:HealthLabs.com
2020/05/03 全球购物
大专生自我鉴定怎么写
2014/09/16 职场文书
2015教师个人师德工作总结
2015/10/23 职场文书
从np.random.normal()到正态分布的拟合操作
2021/06/02 Python
详细介绍MySQL中limit和offset的用法
2022/05/06 MySQL