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中的对象和数组的应用技巧
Jan 07 Javascript
jQuery 名称冲突的解决方法
Apr 08 Javascript
JavaScript运行时库属性一览表
Mar 14 Javascript
jQuery模拟黑客帝国矩阵效果实例
Jun 28 Javascript
jQuery实现打开网页自动弹出遮罩层或点击弹出遮罩层功能示例
Oct 19 jQuery
原生JavaScrpit中异步请求Ajax实现方法
Nov 03 Javascript
详解webpack与SPA实践之开发环境搭建
Dec 18 Javascript
JavaScript函数apply()和call()用法与异同分析
Aug 10 Javascript
在vue项目中使用Jquery-contextmenu插件的步骤讲解
Jan 27 jQuery
vue插槽slot的简单理解与用法实例分析
Mar 14 Javascript
vue实现表单未编辑或未保存离开弹窗提示功能
Apr 08 Javascript
vue 中this.$set 动态绑定数据的案例讲解
Jan 29 Vue.js
用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 字符串编码截取函数(兼容utf-8和gb2312)
2009/05/02 PHP
PHP学习笔记之二 php入门知识
2011/01/12 PHP
php中通过虚代理实现延迟加载的实现代码
2011/06/10 PHP
PHP中获取变量的变量名的一段代码的bug分析
2011/07/07 PHP
CI框架源码解读之利用Hook.php文件完成功能扩展的方法
2016/05/18 PHP
Yii框架引用插件和ckeditor中body与P标签去除的方法
2017/01/19 PHP
PHP检查网站是否宕机的方法示例
2017/07/24 PHP
thinkPHP框架实现多表查询的方法
2018/06/14 PHP
PHP添加文字水印或图片水印的水印类完整源代码与使用示例
2019/03/18 PHP
高性能Javascript笔记 数据的存储与访问性能优化
2012/08/02 Javascript
js实现TAB切换对应不同颜色的代码
2015/08/31 Javascript
JavaScript Split()方法
2015/12/18 Javascript
深入浅析AngularJS和DataModel
2016/02/16 Javascript
使用JavaScript获取Request中参数的值方法
2016/09/27 Javascript
vue2.0开发实践总结之疑难篇
2016/12/07 Javascript
前端JS面试中常见的算法问题总结
2016/12/23 Javascript
webpack 2的react开发配置实例代码
2017/07/28 Javascript
js与jQuery实现获取table中的数据并拼成json字符串操作示例
2018/07/12 jQuery
微信JS-SDK实现微信会员卡功能(给用户微信卡包里发送会员卡)
2019/07/25 Javascript
JS实现前端路由功能示例【原生路由】
2020/05/29 Javascript
vue实现前端分页完整代码
2020/06/17 Javascript
python基于socket实现网络广播的方法
2015/04/29 Python
python任务调度实例分析
2015/05/19 Python
Python连接Redis的基本配置方法
2018/09/13 Python
8种用Python实现线性回归的方法对比详解
2019/07/10 Python
python GUI库图形界面开发之PyQt5树形结构控件QTreeWidget详细使用方法与实例
2020/03/02 Python
如何解决python多种版本冲突问题
2020/10/13 Python
英国排名第一的LED灯泡网站:LED Bulbs
2019/09/03 全球购物
阿迪达斯香港官网:adidas香港
2019/11/09 全球购物
如果让你测试一台高速激光打印机,你都会进行哪些测试
2012/12/04 面试题
J2EE面试题集锦(附答案)
2013/08/16 面试题
2014年纪委工作总结
2014/12/05 职场文书
运动会宣传语
2015/07/13 职场文书
签约仪式致辞
2015/07/30 职场文书
浅析InnoDB索引结构
2021/04/05 MySQL
如何判断pytorch是否支持GPU加速
2021/06/01 Python