javascript+css 网页每次加载不同样式的实现方法


Posted in Javascript onDecember 27, 2009

【明确需求】
网页加载样式表default.css,会展现默认风格。同时为实现多种风格,制作了skin1.css,skin2.css,skin3.css三种定制样式。如果在加载default.css后,再加载其中某一样式表,则会覆盖默认风格,展示新风格;
每次随机加载skin1.css、skin2.css、skin3.css,或者使用默认风格。需要注意的一点是,随机加载也有可能使这一次和上一次的样式相同。
【实现思路】
使用document.write动态向<head />中写入css载入语句;
通过生成的随机数,随机加载样式表;
使用cookie机制记录当前风格,确保下次下次风格与当前风格一定不同。
【实现代码】
比较简单,我这里就直接贴代码了,里面略加注释:

var Init = { 
//样式表文件目录路径 
    baseSkinUrl : "/blog/css/skin/", 
    //样式表文件名称列表 
    styles : ["default", "skin1", "skin2", "skin3"], 
    //样式cookie的key值 
    cookieKey : "css9_blog_random_css", 
    //定义方法,获取min至max间的随机数,包含min及max 
    getRandomNum : function(min, max){ 
        return min + Math.floor(Math.random() * (max - min + 1)); 
    }, 
    //定义方法,获取cookie值 
    getCookie : function(name) { 
        var arr = document.cookie.match(new RegExp("(^| )" + name + "=([^;]*)(;|$)")); 
        if (arr != null) { 
            return unescape(arr[2]); 
        } 
        return null; 
    }, 
    //定义方法,设置cookie值 
    setCookie : function(sName,sValue,objHours,sPath,sDomain,bSecure){ 
        var sCookie = sName + "=" + encodeURIComponent(sValue); 
        if (objHours) { 
            var date = new Date(); 
            var ms = objHours * 3600 * 1000; 
            date.setTime(date.getTime() + ms); 
            sCookie += ";expires=" + date.toGMTString(); 
        } 
        if (sPath) { 
            sCookie += ";path=" + sPath; 
        } 
        if (sDomain) { 
            sCookie += ";domain=" + sDomain; 
        } 
        if (bSecure) { 
            sCookie += ";secure"; 
        } 
        document.cookie=sCookie; 
    }, 
//定义方法,通过获取随机数随机加载CSS 
    loadCSS : function(){ 
        var length = this.styles.length, 
         random = this.getRandomNum(0, length-1), 
         cookieStyle = this.getCookie(this.cookieKey), 
         currentStyle = "default"; 
        //如果当前随机取到的样式与cookie中样式相同,则重新计算随机数 
while(this.styles[random] == cookieStyle) 
        { 
            random = this.getRandomNum(0, length-1) 
        } 
        currentStyle = this.styles[random]; 
        //将新样式存入cookie,cookie有效时间为24小时 
this.setCookie(this.cookieKey, currentStyle, 24, "/", "css9.net", false); 
        //若样式名称不为"default"默认样式,则向<head />标签中写入定制样式 
if(currentStyle != "default") 
        { 
            document.write('<link rel="stylesheet" type="text/css" 
href="' + this.baseSkinUrl + this.styles[random] + '.css" />'); 
        }         
    } 
} 
Init.loadCSS(); //执行随机加载CSS方法

将上面js代码保存为Init.js文件,并在<head />中加载该js文件。

使用提示: 如果你的网页中已经使用了jquery,那么可以用我之前介绍的jQuery cookie操作插件实现cookie的读写操作,不必再定义代码中的setCookie和getCookie方法。

Javascript 相关文章推荐
Javascript表达式中连续的 &amp;&amp; 和 || 之赋值区别
Oct 17 Javascript
ExtJs Excel导出并下载IIS服务器端遇到的问题
Sep 16 Javascript
jQuery 联动日历实现代码
May 31 Javascript
node.js中的fs.read方法使用说明
Dec 17 Javascript
jquery隔行换色效果实现方法
Jan 15 Javascript
jquery滚动特效集锦
Jun 03 Javascript
jquery利用拖拽方式在图片上添加热链接
Nov 24 Javascript
js获取url传值的方法
Dec 18 Javascript
jQuery设计思想
Mar 07 Javascript
深度了解vue.js中hooks的相关知识
Jun 14 Javascript
构建大型 Vue.js 项目的10条建议(小结)
Nov 14 Javascript
JS实现九宫格拼图游戏
Jun 28 Javascript
用Jquery实现可编辑表格并用AJAX提交到服务器修改数据
Dec 27 #Javascript
jQuery中的常用事件总结
Dec 27 #Javascript
jQuery 动态酷效果实现总结
Dec 27 #Javascript
javascript 清空form表单中某种元素的值
Dec 26 #Javascript
JavaScript 入门基础知识 想学习js的朋友可以参考下
Dec 26 #Javascript
十分钟打造AutoComplete自动完成效果代码
Dec 26 #Javascript
jQuery 常见开发使用技巧总结
Dec 26 #Javascript
You might like
PHP 处理TXT文件(打开/关闭/检查/读取)
2013/05/13 PHP
joomla实现注册用户添加新字段的方法
2016/05/05 PHP
php函数mkdir实现递归创建层级目录
2016/10/27 PHP
PHP使用strrev翻转中文乱码问题的解决方法
2017/01/13 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
2017/08/31 PHP
PHP addcslashes()函数讲解
2019/02/03 PHP
Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
2019/12/13 PHP
js 深拷贝函数
2008/12/04 Javascript
保证JavaScript和Asp、Php等后端程序间传值编码统一
2009/04/17 Javascript
浏览器解析js生成的html出现样式问题的解决方法
2012/04/16 Javascript
JS仿百度搜索自动提示框匹配查询功能
2013/11/21 Javascript
简单的ajax连接库分享(不用jquery的ajax)
2014/01/19 Javascript
利用HTML5的画布Canvas实现刮刮卡效果
2015/09/06 Javascript
ClearTimeout消除闪动实例代码
2016/02/29 Javascript
JS控制HTML元素的显示和隐藏的两种方法
2016/09/27 Javascript
easyui中combotree循环获取父节点至根节点并输出路径实现方法
2016/11/10 Javascript
JS实现的表头列头固定页面功能示例
2017/01/10 Javascript
WebPack配置vue多页面的技巧
2018/05/15 Javascript
Javascript数组方法reduce的妙用之处分享
2019/06/10 Javascript
js 获取本周、上周、本月、上月、本季度、上季度的开始结束日期
2020/02/01 Javascript
python抓取京东商城手机列表url实例代码
2013/12/18 Python
python数据结构之二叉树的统计与转换实例
2014/04/29 Python
Django实现图片文字同时提交的方法
2015/05/26 Python
python itchat实现微信自动回复的示例代码
2017/08/14 Python
Linux CentOS7下安装python3 的方法
2018/01/21 Python
python中int与str互转方法
2018/07/02 Python
Python numpy中矩阵的基本用法汇总
2019/02/12 Python
HTML5新特性 多线程(Worker SharedWorker)
2017/04/24 HTML / CSS
报告会主持词
2014/04/02 职场文书
大学生村官演讲稿
2014/04/25 职场文书
材料化学专业求职信
2014/07/15 职场文书
教师群众路线剖析材料
2014/09/29 职场文书
2014超市双十一活动策划方案
2014/09/29 职场文书
西安兵马俑导游词
2015/02/02 职场文书
在Python中如何使用yield
2021/06/07 Python
一文搞懂Java中的注解和反射
2022/06/21 Java/Android