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中的函数与闭包
Apr 14 Javascript
jQuery trigger()方法用法介绍
Jan 13 Javascript
jquery实现向下滑出的二级导航下滑菜单效果
Aug 25 Javascript
javascript中checkbox使用方法实例演示
Nov 19 Javascript
JavaScript性能优化之小知识总结
Nov 20 Javascript
js仿QQ中对联系人向左滑动、滑出删除按钮的操作
Apr 07 Javascript
vue快捷键与基础指令详解
Jun 01 Javascript
AngularJS监听ng-repeat渲染完成的两种方法
Jan 16 Javascript
浅谈vue项目如何打包扔向服务器
May 08 Javascript
vue 权限认证token的实现方法
Jul 17 Javascript
JavaScript设计模式之单例模式原理与用法实例分析
Jul 26 Javascript
原生JavaScript实现弹幕组件的示例代码
Oct 12 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
虫族 Zerg 热键控制
2020/03/14 星际争霸
保存到桌面、设为桌面且带图标的PHP代码
2013/11/19 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
2017/07/21 PHP
PHP实现简单登录界面
2019/10/23 PHP
基于PHP实现用户在线状态检测
2020/11/10 PHP
javascript json2 使用方法
2010/03/16 Javascript
ASP.NET MVC中EasyUI的datagrid跨域调用实现代码
2012/03/14 Javascript
js克隆对象、数组的常用方法介绍
2013/09/26 Javascript
取得元素的左和上偏移量的方法
2014/09/17 Javascript
jquery 实现返回顶部功能
2014/11/17 Javascript
Javascript定义类(class)的三种方法详解
2015/03/13 Javascript
jQuery动态效果显示人物结构关系图的方法
2015/05/07 Javascript
JavaScript实现自动变换表格边框颜色
2015/05/08 Javascript
仅30行代码实现Javascript中的MVC
2016/02/15 Javascript
关于JS中setTimeout()无法调用带参函数问题的解决方法
2016/06/21 Javascript
React中使用collections时key的重要性详解
2017/08/07 Javascript
完美解决axios在ie下的兼容性问题
2018/03/05 Javascript
详解各版本React路由的跳转的方法
2018/05/10 Javascript
Vue 报错TypeError: this.$set is not a function 的解决方法
2018/12/17 Javascript
vue中axios请求的封装实例代码
2019/03/23 Javascript
微信小程序解析富文本过程详解
2019/07/13 Javascript
javascript中的闭包概念与用法实践分析
2019/07/26 Javascript
jQuery单页面文字搜索插件jquery.fullsearch.js的使用方法
2020/02/04 jQuery
NodeJS和浏览器中this关键字的不同之处
2021/03/03 NodeJs
使用Python实现从各个子文件夹中复制指定文件的方法
2018/10/25 Python
python操作openpyxl导出Excel 设置单元格格式及合并处理代码实例
2019/08/27 Python
美国高街时尚品牌:OASAP
2016/07/24 全球购物
教导处工作制度
2014/01/18 职场文书
民族学专业求职信
2014/07/28 职场文书
2015年个人实习工作总结
2014/12/12 职场文书
休学证明范本
2015/06/19 职场文书
我爱我班主题班会
2015/08/13 职场文书
担保公司2015年终工作总结
2015/10/14 职场文书
2019个人工作总结
2019/06/21 职场文书
Python如何使用logging为Flask增加logid
2021/03/30 Python
HTML+JS实现在线朗读器
2022/02/15 Javascript