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复制功能调用实现方案
Dec 13 Javascript
Jquery实现仿新浪微博获取文本框能输入的字数代码
Feb 22 Javascript
js转义字符介绍
Nov 05 Javascript
jquery中get和post的简单实例
Feb 04 Javascript
老生常谈onBlur事件与onfocus事件(js)
Jul 09 Javascript
Vuejs第一篇之入门教程详解(单向绑定、双向绑定、列表渲染、响应函数)
Sep 09 Javascript
WEB前端实现裁剪上传图片功能
Oct 17 Javascript
jQuery图片拖动组件Dropzone用法示例
Jan 17 Javascript
微信小程序实现实时圆形进度条的方法示例
Feb 24 Javascript
Angular在模板驱动表单中自定义校验器的方法
Aug 09 Javascript
JS实现将二维数组转为json格式字符串操作示例
Jul 12 Javascript
浅谈Vue.js中如何实现自定义下拉菜单指令
Jan 06 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
phpmyadmin中配置文件现在需要绝密的短语密码的解决方法
2007/02/11 PHP
PHP使用fopen与file_get_contents读取文件实例分享
2016/03/04 PHP
php注册和登录界面的实现案例(推荐)
2016/10/24 PHP
Yii2数据库操作常用方法小结
2017/05/04 PHP
php用wangeditor3实现图片上传功能
2019/08/22 PHP
定义JavaScript二维数组采用定义数组的数组来实现
2012/12/09 Javascript
JS数组的遍历方式for循环与for...in
2014/07/31 Javascript
JS实现文档加载完成后执行代码
2015/07/09 Javascript
js点击文本框弹出可选择的checkbox复选框
2016/02/03 Javascript
AngularJS实践之使用NgModelController进行数据绑定
2016/10/08 Javascript
微信小程序 数据交互与渲染实例详解
2017/01/21 Javascript
移动设备手势事件库Touch.js使用详解
2017/08/18 Javascript
JavaScript 判断对象中是否有某属性的常用方法
2018/06/14 Javascript
实例分析编写vue组件方法
2019/02/12 Javascript
js滚轮事件 js自定义滚动条的实现
2020/01/18 Javascript
vue实现简易的双向数据绑定
2020/12/29 Vue.js
Vue仿Bibibili首页的问题
2021/01/21 Vue.js
[35:39]完美世界DOTA2联赛PWL S2 FTD.C vs Rebirth 第二场 11.22
2020/11/24 DOTA
Python自动化运维之Ansible定义主机与组规则操作详解
2019/06/13 Python
Win10 安装PyCharm2019.1.1(图文教程)
2019/09/29 Python
pandas之分组groupby()的使用整理与总结
2020/06/18 Python
PyQt5-QDateEdit的简单使用操作
2020/07/12 Python
pycharm 配置svn的图文教程(手把手教你)
2021/01/15 Python
Ralph Lauren拉夫·劳伦美国官网:带有浓郁美国气息的高品味时装品牌
2017/11/01 全球购物
大学自荐信
2013/12/12 职场文书
会议邀请函范文
2014/01/09 职场文书
办公室主任先进事迹
2014/01/18 职场文书
领导班子四风问题对照检查材料
2014/09/27 职场文书
老公婚前保证书
2015/02/28 职场文书
2015年幼儿园教研活动总结
2015/03/25 职场文书
优秀大学生自荐信
2015/03/26 职场文书
2015年科学教研组工作总结
2015/07/22 职场文书
农贸批发市场管理制度
2015/08/07 职场文书
2019个人工作自我评价范文(3篇)
2019/09/19 职场文书
Pyhton爬虫知识之正则表达式详解
2022/04/01 Python
Win11远程连接不上怎么办?Win11远程桌面用不了的解决方法
2022/08/05 数码科技