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 自定义带默认值的函数
Jul 21 Javascript
js通过元素class名字获取元素集合的具体实现
Jan 06 Javascript
详解jQuery Mobile自定义标签
Jan 06 Javascript
jquery 删除节点 添加节点 找兄弟节点的简单实现
Dec 07 Javascript
js实现图片懒加载效果
Jul 17 Javascript
Vue精简版风格概述
Jan 30 Javascript
Angular2 自定义表单验证器的实现方法
Dec 14 Javascript
详解element-ui中表单验证的三种方式
Sep 18 Javascript
微信小程序实现搜索功能
Mar 10 Javascript
vue element table中自定义一些input的验证操作
Jul 18 Javascript
vue axios请求成功却进入catch的原因分析
Sep 08 Javascript
wepy--用vantUI 实现上弹列表并选择相应的值操作
Nov 03 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批量生成随机用户名
2008/07/10 PHP
php之Memcache学习笔记
2013/06/17 PHP
PHP系统命令函数使用分析
2013/07/05 PHP
PHP使用flock实现文件加锁的方法
2015/07/01 PHP
浅谈PHP中的
2016/04/23 PHP
PHP实现对xml进行简单的增删改查(CRUD)操作示例
2017/05/19 PHP
在jQuery中 关于json空对象筛选替换
2013/04/15 Javascript
js实现正方形颜色从下往上升的效果
2014/08/04 Javascript
javascript动态创建及删除元素的方法
2014/12/22 Javascript
Jquery的基本对象转换和文档加载用法实例
2015/02/25 Javascript
谈谈JS中常遇到的浏览器兼容问题和解决方法
2016/12/17 Javascript
详解webpack异步加载业务模块
2017/06/23 Javascript
从零开始搭建vue移动端项目到上线的步骤
2018/10/15 Javascript
Layui表格监听行单双击事件讲解
2019/11/14 Javascript
推荐几个不错的console调试技巧实现
2019/12/20 Javascript
Python 转义字符详细介绍
2017/03/21 Python
Python用 KNN 进行验证码识别的实现方法
2018/02/06 Python
Python socket实现简单聊天室
2018/04/01 Python
Django实现微信小程序的登录验证功能并维护登录态
2019/07/04 Python
在python中做正态性检验示例
2019/12/09 Python
基于python实现语音录入识别代码实例
2020/01/17 Python
关于matplotlib-legend 位置属性 loc 使用说明
2020/05/16 Python
Python多线程正确用法实例解析
2020/05/30 Python
Pycharm 解决自动格式化冲突的设置操作
2021/01/15 Python
Python第三方库安装缓慢的解决方法
2021/02/06 Python
AmazeUI在模态框中嵌入表单形成模态输入框
2020/08/20 HTML / CSS
Paradigit比利时电脑卖场:购买笔记本、电脑、平板和外围设备
2016/11/28 全球购物
高中毕业生个人自我鉴定
2013/11/24 职场文书
有创意的广告词
2014/03/18 职场文书
感恩老师演讲稿400字
2014/08/28 职场文书
家庭教育的心得体会
2014/09/01 职场文书
党的群众路线教育实践活动查摆问题自查报告
2014/10/10 职场文书
2015年预防青少年违法犯罪工作总结
2015/05/22 职场文书
银行求职信怎么写
2019/06/20 职场文书
浅析Python中的套接字编程
2021/06/22 Python
MySQL约束(创建表时的各种条件说明)
2022/06/21 MySQL