实现在客户端静态换肤(更新CSS)

 首先要有两有两套CSS文件,这是前提,不然就没有肤可以换了.
实现思路:
  主要是用JavaScript动态地修改内在中的HTML结构,向里面添加、删除、修改HTML代码,在Cookie里保存用户的CSS选择情况。
过程:
  刚开始想用CSS覆盖来实现,因为大家知道一般情况下CSS是根据最后面的来显示的,如果前后有两个CSS的某项是一定的,选择后者。然后,如果这样的话,困难比较大,因为这样要求两个CSS所包含的控制项基本一致,否则在实现相关覆盖的过程中,总会有一些不足,然而这做起来比较麻烦,特别是有多套CSS的情况下更麻烦。
  后面想到把不要的css的Link删掉,然后删掉后,浏览器并不会进行重新加载,又是一个问题。
  后来在看stylesheet的属性时,一个disabled属性吸引了我,原来可以把一个CSS文件Disable掉。于是重新改写我的程序,终于见效。

代码:

// JScript File
//
 修改皮肤JS 添加人:flashlm 07-11-22AM
//
//
在客户端设置Cookies,保存所选中的皮肤
function SetCookie(name,value) {
var argv=
SetCookie.arguments;
var argc=
SetCookie.arguments.length;
var expires=(2<argc)?argv[2]:null
;
var path=(3<argc)?argv[3]:null
;
var domain=(4<argc)?argv[4]:null
;
var secure=(5<argc)?argv[5]:false
;
document.cookie
=name+"="+escape(value)+((expires==null)?"":("; expires="+expires.toGMTString()))+((path==null)?"":("; path="+path))+((domain==null)?"":("; domain="+domain))+((secure==true)?"; secure":""
);
}

//读取Cookie,用来选择皮肤
function GetCookie(Name)  {
    
var search = Name + "="
;
    
var returnvalue = ""
;
    
if (document.cookie.length > 0
{
        offset 
=
 document.cookie.indexOf(search);
        
if (offset != -1

            offset 
+=
 search.length;
            end 
= document.cookie.indexOf(";"
, offset); 
        
if (end == -1
)
            end 
=
 document.cookie.length;
            returnvalue
=
unescape(document.cookie.substring(offset,end));
        }

    }

    
return returnvalue;
}

//清除页面CSS
function clearcss() {
    
//获得Head节点

    var head = document.getElementsByTagName('HEAD').item(0);
    
//循环删除Link节点

    while(head.getElementsByTagName('link').length>0)
    
{
        
var oldStyle = head.getElementsByTagName('link').item(0
);
        head.removeChild(oldStyle);
    }

}

//禁用CSS,用于将之前的CSS禁掉
function disablecss() {
    
for ( i = 0; i < document.styleSheets.length; i++
 )
    
{
        document.styleSheets(i).disabled
=true
;
    }

}

//修改CSS,用于向页面添加CSS
function changecss(url) {
    
if(url!="")
{
        
var head = document.getElementsByTagName('HEAD').item(0
);
        
//新建Link节点

        var style = document.createElement('link');
        style.href 
=
 url;
        style.rel 
= 'stylesheet'

        style.type 
= 'text/css';
        disablecss();
        
//添加Link节点

        head.appendChild(style);
        
var expdate=new
 Date();
        expdate.setTime(expdate.getTime()
+(24*60*60*1000*30
));
    
//expdate=null;

    //以下设置COOKIES时间为1年,自己随便设置该时间..
    SetCookie("petshop_nowskin",url,expdate,"/",null,false);
    }

}

//合Select宽选中当前使用的皮肤
function changeselect(StrTemp2) {
    
var
 i;
    
var SearchFlag=0
;
    
var StrTemp=''
;
//    var theme=document.getElementById('themes');

    for(i=0;i<document.getElementById("themes").length;i=i+1){
        StrTemp
=document.getElementById("themes"
).item(i).value;
        
//如果是当前皮肤

        if(StrTemp==StrTemp2) {
            document.getElementById(
"themes").item(i).selected = true
;
        }

        
else
        
{
            document.getElementById(
"themes").item(i).selected = false
;
        }

    }

}

在页面顶部引入上面的JS文件,然后在叶面里加个这样的一个Select:

  < select  name ="theme"  id ="themes"  onchange ="changecss(themes.options[theme.selectedIndex].value )" >
  
< option  value ="App_Themes/PetShop/StyleSheet.css"  id ="tpetshop" > Petshop </ option >
  
< option  value ="App_Themes/common/common.css"  id ="tcommon" > common </ option >
</ select >

接着在页面底部加上这样一段JavaScript:

< script type = " text/javascript "  language = " javascript " >
    
<!--
        
// 读取客户皮肤数据 添加人:flashlm 07-11-23 AM
        
        
var  styleurl  =  GetCookie( " petshop_nowskin " );
        
// 如果不是空的,进行修改
         if (styleurl != null )
        
{
            
//修改CSS
            changecss(styleurl);
            
//alert(document.getElementById("themes").item(1).id);
            //修改Select框的选择状态
            changeselect(styleurl);
        }

    
//  -->
     </ script >
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现静态网页一键换肤的方法主要是利用JavaScript动态修改CSS样式表中的样式,从而达到切换皮肤的效果。 下面给出一个简单的实现示例: HTML代码: ```html <!DOCTYPE html> <html> <head> <title>一键换肤示例</title> <link rel="stylesheet" type="text/css" href="style.css" id="skin"> <script type="text/javascript" src="skin.js"></script> </head> <body> <div class="container"> <h1>一键换肤示例</h1> <p>这是一个静态网页,支持一键换肤。</p> <button onclick="changeSkin('blue')">蓝色</button> <button onclick="changeSkin('green')">绿色</button> <button onclick="changeSkin('yellow')">黄色</button> </div> </body> </html> ``` CSS代码: ```css .container { width: 500px; margin: 0 auto; padding: 20px; background-color: #f0f0f0; } h1 { font-size: 36px; color: #333; } p { font-size: 18px; color: #666; line-height: 1.8; } .blue { background-color: #0077be; color: #fff; } .green { background-color: #00b300; color: #fff; } .yellow { background-color: #ffd700; color: #333; } ``` JavaScript代码: ```javascript function changeSkin(skin) { var css = document.getElementById('skin'); css.href = 'skin-' + skin + '.css'; } ``` 在这个示例中,我们在HTML代码中加入了三个按钮,分别代表不同的皮肤。当用户点击按钮时,会触发changeSkin函数,该函数通过修改CSS样式表中的href属性,来加载不同的皮肤CSS文件。这些皮肤CSS文件需要事先定义好,并通过不同的类名来实现样式的不同。 需要注意的是,在修改href属性时,需要保证新的CSS文件已经加载完成,否则可能会出现样式混乱的情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值