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下拉框二级关联菜单效果代码具体实现
Aug 03 Javascript
js获取select选中的option的text示例代码
Dec 19 Javascript
jQuery基于函数重载实现自定义Alert函数样式的方法
Jul 27 Javascript
AngularJS通过$location获取及改变当前页面的URL
Sep 23 Javascript
js 提交form表单和设置form表单请求路径的实现方法
Oct 25 Javascript
jQuery 开发之EasyUI 添加数据的实例
Sep 26 jQuery
js实现手机web图片左右滑动效果
Dec 29 Javascript
vue项目base64字符串转图片的实现代码
Jul 13 Javascript
微信小程序五子棋游戏AI实现方法【附demo源码下载】
Feb 20 Javascript
在 Vue 应用中使用 Netlify 表单功能的方法详解
Jun 03 Javascript
JS实现点击发送验证码 xx秒后重新发送功能
Jul 30 Javascript
vue和iview实现Scroll 数据无限滚动功能
Oct 31 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 的 __FILE__ 常量
2007/01/15 PHP
PHP 文件上传全攻略
2010/04/28 PHP
解析PHP缓存函数的使用说明
2013/05/10 PHP
PHP实现的激活用户注册验证邮箱功能示例
2017/06/06 PHP
laravel学习笔记之模型事件的几种用法示例
2017/08/15 PHP
php 使用html5 XHR2实现上传文件与进度显示功能示例
2020/03/03 PHP
获取DOM对象的几种扩展及简写
2006/10/09 Javascript
关于恒等于(===)和非恒等于(!==)
2007/08/20 Javascript
用showModalDialog弹出页面后,提交表单总是弹出一个新窗口
2009/07/18 Javascript
jquery 打开窗口返回值实现代码
2010/03/04 Javascript
深入Javascript函数、递归与闭包(执行环境、变量对象与作用域链)使用详解
2013/05/08 Javascript
Javascript学习笔记之函数篇(五) : 构造函数
2014/11/23 Javascript
jQuery实现的指纹扫描效果实例(附演示与demo源码下载)
2016/01/26 Javascript
javascript简单判断输入内容是否合法的方法
2016/05/11 Javascript
用NodeJS实现批量查询地理位置的经纬度接口
2016/08/16 NodeJs
使用Bootrap和Vue实现仿百度搜索功能
2017/10/26 Javascript
Vue自定义过滤器格式化数字三位加一逗号实现代码
2018/03/23 Javascript
JavaScript的Proxy可以做哪些有意思的事儿
2019/06/15 Javascript
JS实现的简单tab切换功能完整示例
2019/06/20 Javascript
Python、PyCharm安装及使用方法(Mac版)详解
2017/04/28 Python
python里使用正则表达式的组嵌套实例详解
2017/10/24 Python
python 字典修改键(key)的几种方法
2018/08/10 Python
python+django+rest框架配置创建方法
2019/08/31 Python
Python跑循环时内存泄露的解决方法
2020/01/13 Python
python实现与redis交互操作详解
2020/04/21 Python
css3圆角样式分享自定义按钮样式
2013/12/27 HTML / CSS
英国在线电子和小工具商店:TecoBuy
2018/10/06 全球购物
Java里面有没有全局变量?为什么?
2015/02/06 面试题
VLAN和VPN有什么区别?分别实现在OSI的第几层?
2014/12/23 面试题
计算机专业应届生求职信
2014/04/06 职场文书
装配出错检讨书
2014/09/23 职场文书
给领导的感谢信范文
2015/01/23 职场文书
民间借贷被告代理词
2015/05/23 职场文书
新员工实习期个人工作总结
2015/10/15 职场文书
浅谈Golang 嵌套 interface 的赋值问题
2021/04/29 Golang
JS实现扫雷项目总结
2021/05/19 Javascript