请选择 进入手机版 | 继续访问电脑版
收藏本站腾讯微博新浪微博
点点网模板设计大赛 phpchina

经典论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

蓝色理想 最新研发动态 用悬赏 三天解决问题 解决访问速度慢 论坛支持农历生日 - 给官方提建议

论坛活动及任务 归纳网站最新活动 地图任务 邮件更新任务:保护帐号安全

积分换实物,来参加蓝色理想积分兑换吧! 联系招聘客服 蓝色理想帮你找工作! 万元奖励等你拿——点点网模板设计大赛

查看: 17631|回复: 52

页面换肤功能浅析 [复制链接]

ymyang 楼主

青花瓷

银牌会员 手机认证 

帖子
813
体力
2653
威望
7
发表于 2008-6-3 15:51:53 |显示全部楼层
原理:通过存取cookie和dom操作调用不同的样式表文件来实现前台换肤.

Html代码部分:
1.要有一个带id的样式表链接,我们要通过操作这个链接来调用不同的href.
  1. <link href="css/main0.css" rel="stylesheet" type="text/css" id="cssfile" />
复制代码

2.皮肤选择按钮(后台为每个li添加onclick事件,触发换肤功能)
  1.    
  2. <ul id="skin">                               
  3. <li id="skin_0" title="灰色">灰色</li>
  4. <li id="skin_1" title="绿色">绿色</li>
  5. <li id="skin_2" title="黄色">黄色</li>
  6. <li id="skin_3" title="蓝色">蓝色</li>
  7. <li id="skin_4" title="粉色">粉色</li>
  8. <li id="skin_5" title="紫色">紫色</li>
  9. </ul>
复制代码

Js部分:
1.换肤方法
  1. //设置cookie,按钮选中状态,页面皮肤
  2. skin.setSkin=function(n){
  3.         var skins =$("skin").getElementsByTagName("li");
  4.         for (i=0;i<skins.length;i++)
  5.         {
  6.                 skins[i].className="";//初始化按钮状态
  7.         }
  8.         skin.setCookie(n);//保存当前样式
  9.         $("skin_"+n).className="selected";//设置选中皮肤按钮的样式
  10.         $("cssfile").href="css/main"+n+".css";//设置页面样式
  11. }
复制代码

2.存取cookie
  1. //将当前皮肤n存到cookie
  2. skin.setCookie=function(n){
  3.         var expires=new Date();
  4.         expires.setTime(expires.getTime()+24*60*60*365*1000);
  5.         var flag="Skin_Cookie="+n;
  6.         document.cookie=flag+";expires="+expires.toGMTString();
  7. }
  8. //返回用户设置的皮肤样式
  9. skin.readCookie=function(){
  10.         var skin=0;
  11.         var mycookie=document.cookie;
  12.         var name="Skin_Cookie";
  13.         var start1=mycookie.indexOf(name+"=");
  14.         if(start1==-1){
  15.                 skin=0;//如果没有设置则显示默认样式
  16.         }
  17.         else{
  18.                 var start=mycookie.indexOf("=",start1)+1;
  19.                 var end=mycookie.indexOf(";",start);
  20.                 if(end=-1){
  21.                         end=mycookie.length;
  22.                 }
  23.                 var values= unescape(mycookie.substring(start,end));
  24.                 if (values!=null)
  25.                 {
  26.                         skin=values;
  27.                 }
  28.         }
  29.         return skin;
  30.        
  31. }
复制代码

3.绑定换肤按钮事件
  1. skin.addEvent=function(){
  2.         var skins =$("skin").getElementsByTagName("li");
  3.         for (i=0;i<skins.length;i++)
  4.         {
  5.                 skins[i].onclick=function(){skin.setSkin(this.id.substring(5))};
  6.         }
  7. }
复制代码

4.页面加载完成后设置皮肤样式
  1. window.onload=function(){
  2.         skin.setSkin(skin.readCookie());//根据读取cookie返回值设置皮肤样式
  3.         skin.addEvent();//绑定按钮事件
  4. }
复制代码
附件: 你需要登录才可以下载或查看附件。没有帐号?注册
已有 1 人评分威望 收起 理由
sunritz + 1 谢谢分享

总评分: 威望 + 1   查看全部评分

西部数码顶级域名注册商39元抢注!

普林斯顿

银牌会员

帖子
669
体力
3052
威望
0
发表于 2008-6-3 16:09:16 |显示全部楼层
我也海淀的 有空加我QQ交流下啊
你敢说我不英俊吗?FLASH CS3群:51180994
租服务器,上51IDC | [长沙]招聘:PHP经理10K/WEB前端6K/PHP开发6K

使用道具 举报

keysky 
帖子
8
体力
49
威望
0
发表于 2008-6-5 09:37:40 |显示全部楼层
嗯.
好哦`

学习..


使用道具 举报

帖子
78
体力
129
威望
0
发表于 2008-6-5 09:41:37 |显示全部楼层
学习了 谢谢
E网情深www.ee73.com

使用道具 举报

帖子
39
体力
174
威望
1
发表于 2008-6-10 11:17:20 |显示全部楼层

回复 ymyang 在 1# 的帖子


不错
值得收藏

使用道具 举报

谁输谁涮碗

初级会员

帖子
93
体力
261
威望
0
发表于 2008-6-10 12:30:40 |显示全部楼层
共同学习^_^
正鼓捣换肤的东东哪

使用道具 举报

帖子
110
体力
438
威望
0
发表于 2008-6-30 15:56:00 |显示全部楼层
FF不兼容啊。。哪位大虾能改好么

使用道具 举报

ymyang 楼主

青花瓷

银牌会员 手机认证 

帖子
813
体力
2653
威望
7
发表于 2008-6-30 16:35:21 |显示全部楼层
兼容ff的,楼上看看是不是firefox禁用cookie了

使用道具 举报

topcg 
帖子
111
体力
450
威望
0
发表于 2008-6-30 17:01:39 |显示全部楼层
这个是很经典的一个办法。

尤其是存储cookies 更是很人性化的

使用道具 举报

帖子
110
体力
438
威望
0
发表于 2008-6-30 17:32:48 |显示全部楼层
原帖由 ymyang 于 2008-6-30 16:35 发表
兼容ff的,楼上看看是不是firefox禁用cookie了

不是的啊。是那些按钮不可以点啊。点了没反应,皮肤也不变

使用道具 举报

ymyang 楼主

青花瓷

银牌会员 手机认证 

帖子
813
体力
2653
威望
7
发表于 2008-6-30 17:40:26 |显示全部楼层
firefox菜单-工具-选项-内容-启用javascript

使用道具 举报

帖子
110
体力
438
威望
0
发表于 2008-7-1 17:34:01 |显示全部楼层
原帖由 ymyang 于 2008-6-30 17:40 发表
firefox菜单-工具-选项-内容-启用javascript

晕。这个我也设置了。难道是我的FF有问题

使用道具 举报

荷西

银牌会员 手机认证 

帖子
2770
体力
1881
威望
1
发表于 2008-7-2 14:09:04 |显示全部楼层
很漂亮的效果  兼容FF
谢谢分享
晕 好像出问题了   在ff上运行一次后  就不能用了
IE下一直正常
最新动态:我清楚了一下cookie  又正常了

[ 本帖最后由 shaohua162001 于 2008-7-2 14:30 编辑 ]

使用道具 举报

帖子
3
体力
10
威望
0
居住地
山东省 济南市
发表于 2008-7-19 16:54:46 |显示全部楼层

非常感谢

楼主,我运行代码时,IE和FF都能兼容了,但是在IE浏览器下,你F5一刷新,又回到原始的配色方案,有办法解决吗?

使用道具 举报

逆流

高级会员 手机认证 

帖子
231
体力
569
威望
0
发表于 2008-7-19 17:44:53 |显示全部楼层
很好的想法...

使用道具 举报

帖子
8
体力
9
威望
0
居住地
广东省 深圳市
发表于 2008-7-19 18:36:19 |显示全部楼层
用了css还加上js控制,不是什么好方法。这样变得还要考虑js的浏览器兼容问题。
88web.org

使用道具 举报

帖子
21
体力
56
威望
0
居住地
江苏省 南通市
发表于 2008-7-19 18:58:05 |显示全部楼层
不错,学习一下!!!

使用道具 举报

帖子
336
体力
1499
威望
0
发表于 2008-7-19 19:07:10 |显示全部楼层
换肤的功能一般都是用DIV来实现的吧,也就是说根据选择调用不同的DIV CSS样式!!个人理解

使用道具 举报

逆流

高级会员 手机认证 

帖子
231
体力
569
威望
0
发表于 2008-7-21 09:27:38 |显示全部楼层

回复 cqliudebao 在 18# 的帖子

不是DIV 是CSS样式

使用道具 举报

maxcn 
帖子
28
体力
131
威望
0
发表于 2008-7-21 09:43:24 |显示全部楼层

ddddd

dddddddddddddddddddddddddddddddd

使用道具 举报

逆流

高级会员 手机认证 

帖子
231
体力
569
威望
0
发表于 2008-7-23 12:29:34 |显示全部楼层

IE7下有问题


删除全部的浏览记录又可以了,刷新下就又不行了。
我是放在IIS下面测试的.直接打开的话也没问题.

[ 本帖最后由 tongfan 于 2008-7-23 12:33 编辑 ]
附件: 你需要登录才可以下载或查看附件。没有帐号?注册

使用道具 举报

帖子
45
体力
318
威望
0
发表于 2008-7-23 14:30:10 |显示全部楼层
楼主好人,顶一个

使用道具 举报

朝晖

银牌会员 手机认证 

帖子
286
体力
1355
威望
0
居住地
广东省 广州市
发表于 2008-7-23 17:16:32 |显示全部楼层
学习了,谢谢分享

使用道具 举报

ymyang 楼主

青花瓷

银牌会员 手机认证 

帖子
813
体力
2653
威望
7
发表于 2008-7-24 14:14:57 |显示全部楼层
原来的方法在ie7下读取的cookie值有时会有问题.
重写了一个新的截取方法.
  1. skin.readCookie=function(){
  2.         var skin=0
  3.         var mycookie=document.cookie;
  4.         var name="Skin_Cookie";
  5.         if(mycookie.indexOf(name+"=")==-1){
  6.                 skin=0;
  7.         }
  8.         else{
  9.                 var values=mycookie.split(name+"=")[1].split(";")[0];
  10.                 if (values!=null)
  11.                 {
  12.                         skin=values;
  13.                 }
  14.                 else{
  15.                         skin=0;               
  16.                 }
  17.         }
  18.         return skin;
  19.        
  20. }
复制代码

使用道具 举报

六月阳光

银牌会员

帖子
869
体力
2199
威望
2
发表于 2008-8-21 16:07:36 |显示全部楼层
有一个小问题没有解决!

如果有子页面也要跟着主页面换肤的时候!

子页面HTML中必须包含

<ul id="skin" class="skins">                               
            <li id="skin_0" title="灰色">灰色</li>
            <li id="skin_1" title="绿色">绿色</li>
            <li id="skin_2" title="黄色">黄色</li>
            <li id="skin_3" title="蓝色">蓝色</li>
            <li id="skin_4" title="粉色">粉色</li>
            <li id="skin_5" title="紫色">紫色</li>
</ul>

否则在子页面不起作用!楼主能否再改改!

坛子里还有一个换肤的,思路跟你这个差不多,但也有一个缺点,就是在主页面的点击换肤的时候,不显示当前点的是哪个皮肤......但这个有个好处就是子页面不用再加"ID"引入,也可以跟着主页一起换肤.
看这个链接http://www.dvlot.com/changeskin/

使用道具 举报

nssun 
帖子
29
体力
63
威望
0
发表于 2008-8-21 16:37:49 |显示全部楼层
收藏学习下,真的不错啊

使用道具 举报

帖子
180
体力
575
威望
0
发表于 2008-8-22 17:02:45 |显示全部楼层
谢谢!有空学习一下

使用道具 举报

哈哈啦

初级会员

帖子
47
体力
199
威望
0
发表于 2008-8-22 17:38:09 |显示全部楼层
IE7下测试出错。刷新后出现出错信息。

行:54
char:2
null为空或不是对象。

[ 本帖最后由 show999 于 2008-8-22 17:40 编辑 ]
www.hahala.com

使用道具 举报

帖子
97
体力
2079
威望
0
居住地
辽宁省 大连市
发表于 2008-9-22 18:23:05 |显示全部楼层
先学习下`

使用道具 举报

alone7 

Samliu

高级会员 手机认证 

帖子
107
体力
772
威望
0
居住地
湖南省 长沙市
发表于 2009-2-4 14:41:09 |显示全部楼层
确实不错
http://fuweb.cn

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

Archiver|手机版|安久科技提供CDN|blueidea.com ( 京ICP备05002321号 )  

GMT+8, 2012-2-13 08:01 , Processed in 0.150554 second(s), 9 queries , Gzip On, Memcache On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部