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 相关文章推荐
js下通过getList函数实现分页效果的代码
Sep 17 Javascript
使用js画图之正弦曲线
Jan 12 Javascript
jQuery遍历json的方法分析
Apr 16 Javascript
用JS中split方法实现彩色文字背景效果实例
Aug 24 Javascript
微信小程序 require机制详解及实例代码
Dec 14 Javascript
详解用vue编写弹出框组件
Jul 04 Javascript
Vue 组件间的样式冲突污染
Aug 31 Javascript
EasyUI框架 使用Ajax提交注册信息的实现代码
Sep 27 Javascript
angular.js和vue.js中实现函数去抖示例(debounce)
Jan 18 Javascript
webpack分离css单独打包的方法
Jun 12 Javascript
微信小程序按顺序同步执行的两种方式
Dec 20 Javascript
React中Ref 的使用方法详解
Apr 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
ajax在joomla中的原生态应用代码
2012/07/19 PHP
比较搞笑的js陷阱题
2010/02/07 Javascript
基于jQuery的一个扩展form序列化到json对象
2010/12/09 Javascript
为你的网站增加亮点的9款jQuery插件推荐
2011/05/03 Javascript
关于jQuery对象数据缓存Cache原理以及jQuery.data详解
2013/04/07 Javascript
JavaScript中反正弦函数Math.asin()的使用简介
2015/06/14 Javascript
网页前端登录js按Enter回车键实现登陆的两种方法
2016/05/10 Javascript
JavaScript基础知识点归纳(推荐)
2016/07/09 Javascript
聊一聊JS中的prototype
2016/09/29 Javascript
JavaScript学习笔记之函数记忆
2017/09/06 Javascript
vue.js中实现登录控制的方法示例
2018/04/23 Javascript
深入探讨JavaScript的最基本部分之执行上下文
2019/02/12 Javascript
解决 viewer.js 动态更新图片导致无法预览的问题
2019/05/14 Javascript
vue中英文切换实例代码
2020/01/21 Javascript
python用pickle模块实现“增删改查”的简易功能
2017/06/07 Python
python下setuptools的安装详解及No module named setuptools的解决方法
2017/07/06 Python
Python处理CSV与List的转换方法
2018/04/19 Python
python绘制直线的方法
2018/06/30 Python
pandas 空数据处理方法详解
2019/11/02 Python
Python综合应用名片管理系统案例详解
2020/01/03 Python
python自动化unittest yaml使用过程解析
2020/02/03 Python
TensorFlow通过文件名/文件夹名获取标签,并加入队列的实现
2020/02/17 Python
Python json转字典字符方法实例解析
2020/04/13 Python
Spring @Enable模块驱动原理及使用实例
2020/06/23 Python
GoPro摄像机美国官网:美国运动相机厂商
2018/07/03 全球购物
宝信软件JAVA工程师面试经历
2012/08/19 面试题
会计专业毕业生自我评价
2013/09/25 职场文书
中专毕业自我鉴定
2013/10/16 职场文书
校园门卫岗位职责
2013/12/09 职场文书
负责人任命书范本
2014/06/04 职场文书
2014年中秋节活动总结
2014/08/29 职场文书
党的群众路线教育实践活动领导班子整改方案
2014/10/25 职场文书
2016元旦文艺汇演主持词
2015/07/06 职场文书
幼儿园小朋友毕业感言
2015/07/30 职场文书
只需要这一行代码就能让python计算速度提高十倍
2021/05/24 Python
PYTHON 使用 Pandas 删除某列指定值所在的行
2022/04/28 Python