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 相关文章推荐
Js中sort()方法的用法
Nov 04 Javascript
JavaScript this调用规则说明
Mar 08 Javascript
用客户端js实现带省略号的分页
Apr 27 Javascript
javascript格式化日期时间方法汇总
Jun 19 Javascript
炫酷的js手风琴效果
Oct 13 Javascript
大白话讲解JavaScript的Promise
Apr 06 Javascript
Vue2.0 给Tab标签页和页面切换过渡添加样式的方法
Mar 13 Javascript
webpack的CSS加载器的使用
Sep 11 Javascript
ng-zorro-antd 入门初体验
Dec 03 Javascript
详解vue中async-await的使用误区
Dec 05 Javascript
JavaScript实现两个数组的交集
Mar 25 Javascript
TS 类型收窄教程示例详解
Sep 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
DISCUZ在win2003环境下 Unable to access ./include/common.inc.php in... 的问题终极解决方案
2011/11/21 PHP
Zend Framework数据库操作技巧总结
2017/02/18 PHP
浅谈laravel-admin的sortable和orderby使用问题
2019/10/03 PHP
javascript 动态table添加colspan\rowspan 参数的方法
2009/07/25 Javascript
模拟jQuery ajax服务器端与客户端通信的代码
2011/03/28 Javascript
javascript解析json数据的3种方式
2014/05/08 Javascript
javascript自定义函数参数传递为字符串格式
2014/07/29 Javascript
jQuery中siblings()方法用法实例
2015/01/08 Javascript
jquery利用拖拽方式在图片上添加热链接
2015/11/24 Javascript
jQuery插件实现文件上传功能(支持拖拽)
2020/08/27 Javascript
js实现符合国情的日期插件详解
2017/01/19 Javascript
微信小程序 基础组件与导航组件详细介绍
2017/02/21 Javascript
Dropify.js图片宽高自适应的方法
2017/11/27 Javascript
js Element Traversal规范中的元素遍历方法
2018/04/19 Javascript
对vue中methods互相调用的方法详解
2018/08/30 Javascript
javascript判断一个变量是数组还是对象
2019/04/10 Javascript
Element-ui自定义table表头、修改列标题样式、添加tooltip、:render-header使用
2019/04/11 Javascript
jquery UI实现autocomplete在获取焦点时得到显示列表功能示例
2019/06/04 jQuery
vue 组件中使用 transition 和 transition-group实现过渡动画
2019/07/09 Javascript
Python中操作文件之write()方法的使用教程
2015/05/25 Python
浅谈django orm 优化
2018/08/18 Python
基于 Django 的手机管理系统实现过程详解
2019/08/16 Python
Django框架序列化与反序列化操作详解
2019/11/01 Python
pytorch forward两个参数实例
2020/01/17 Python
python标准库OS模块详解
2020/03/10 Python
如何解决安装python3.6.1失败
2020/07/01 Python
加拿大国民体育购物网站:National Sports
2018/11/04 全球购物
获取邓白氏信用报告:Dun & Bradstreet
2019/01/22 全球购物
.NET里面如何取得当前的屏幕分辨率
2012/12/06 面试题
留学推荐信写作指南
2014/01/25 职场文书
人力资源部门的主要职能
2014/02/22 职场文书
旺仔牛奶广告词
2014/03/20 职场文书
天坛导游词
2015/02/02 职场文书
2019年幼儿园管理条例范本!
2019/07/17 职场文书
测量JavaScript函数的性能各种方式对比
2021/04/27 Javascript
详解SQL的窗口函数
2022/04/21 Oracle