根据用户选择用JS切换生效的CSS文件实现网站网页换肤

转载 2013年12月05日 15:55:42

说明:关于实现这个用途的文章,一般只是直接给了代码,没有对关键知识点的必要解释。本文侧重讲解原理和关键点,为方便网友使用,在后面附加了具体的代码,可实现将选择的风格名称存到cookie里去。

正文:

  想要进行网页的换肤,如果用普通的获取各个显示对象然后更改对象的各项STYLE属性或者只是CLASS属性,缺点是十分明显的:

  1、涉及对大量的网页内对象读写,并可能操作多项STYLE属性,JS代码量多。

  2、STYLE代码分散,缺乏组织,更改维护麻烦。

  那么更好的方法是什么呢? 就是直接对LINK对象进行切换设置。大家知道,通过LINK可以引用外部的CSS文件,使之对当前页面内容生效。一般语法是这样的:

  <link type="text/css" rel="stylesheet" href="http://theforever.myid/theforever.css" />

  假设网页提供了N种风格供切换,就可以用N条这样的语句,把CSS文件引进来。需要注意的是,除当前生效CSS以外的LINK标签应该这样写:

  <link type="text/css" rel="alternate stylesheet" href="http://theforever.myid/theforever.css" />

  alternate的意思是“供替换的”,这样浏览器就不会根据这套暂时不想生效的CSS对页面显示进行实际的设置。

  那么如何来切换当前生效的CSS文件,产生换肤效果呢? 就是利用LINK对象的disabled属性。当disabled属性为真时,该LINK对象失效,当disabled属性为假时,则该LINK对象生效。

  这样一来就知道,有针对地设置相应的LINK对象的disabled属性,就可以实现切换了。

  如何将用户的选择和LINK对象一一对应起来呢? 这个方法就多了:

  1.可以给LINK加不同的ID属性,然后document.getElementsById('用户选择的LINK's ID')就得到了指定的LINK。

  2.可以给LINK加不同的TITLE属性,然后遍历所有document.getElementsByTagName('link'),取每个LINK对象的TITLE进行对比。

  3.可以给LINK加不同的自定义属性,然后同上。

  至于如何取得用户所选择的显示风格(或说皮肤)的名称,这个方式就更多了,也很简单,就不列出某个固定的方式了。

  原本不想引用罗列具体的代码,但为了方便一些懒惰成性的朋友,还是附加了一套现成的代码,可实现将用户选择的界面风格名称存到cookie里去,下次打开网页就会看到上次更改的界面风格:

 

unction setActiveStyleSheet(title) {
    var i, a, main;
    for(i=0; (a = document.getElementsByTagName("link")[i]); i++)
    {
        if(a.getAttribute("rel").indexOf("style")!= -1 && a.getAttribute("title"))
        {
            a.disabled = true;
            if(a.getAttribute("title") == title)
            a.disabled = false;
        }
    }
}
function getActiveStyleSheet() {
    var i, a;
    for(i=0; (a = document.getElementsByTagName("link")[i]); i++)
    {
        if(a.getAttribute("rel").indexOf("style")!= -1 &&
         a.getAttribute("title") && !a.disabled)
            return a.getAttribute("title");
    }
    return null;
}
function getPreferredStyleSheet() {
    var i, a;
    for(i=0; (a = document.getElementsByTagName("link")[i]); i++)
    {
        if(a.getAttribute("rel").indexOf("style") != -1
            && a.getAttribute("rel").indexOf("alt") == -1
            && a.getAttribute("title"))
            return a.getAttribute("title");
    }
    return null;
}
function createCookie(name,value,days) {
    if (days)
    {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        var expires = "; expires="+date.toGMTString();
    }
    else
        expires = "";
    document.cookie = name+"="+value+expires+";
    path=/";
}
function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++)
    {
        var c = ca[i];
        while (c.charAt(0)==' ')
            c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return
        c.substring(nameEQ.length,c.length);
    }
    return null;
}
window.onload = function(e)
{
    var cookie = readCookie("style");
    var title = cookie ? cookie :
    getPreferredStyleSheet();
    setActiveStyleSheet(title);
}
window.onunload = function(e)
{
    var title = getActiveStyleSheet();
    createCookie("style", title, 365);
}
var cookie = readCookie("style");
var title = cookie ? cookie :
getPreferredStyleSheet();
setActiveStyleSheet(title);


 转载地址:http://blog.csdn.net/theforever/article/details/6220630

相关文章推荐

根据用户选择用JS切换生效的CSS文件实现网站网页换肤

 说明:关于实现这个用途的文章,一般只是直接给了代码,没有对关键知识点的必要解释。本文侧重讲解原理和关键点,为方便网友使用,在后面附加了具体的代码,可实现将选择的风格名称存到cookie里去。 正文:...

使用Minify来压缩JS和CSS文件来提高网站性能

Minify把CSS和JS压缩和削减(Minify:去掉空格回车符等),以及把多个CSS,JS文件整合到一个文件里。不要以为你的大带宽没有必要进行这类优化。使用它的理由更重要的是文件合并,而不是压缩,...
  • ltqwby
  • ltqwby
  • 2014年10月11日 11:45
  • 339

对网站中的js,css文件进行打包

一,为什么要用smarty进行打包 apache中也有给js,css这样的静态文件进行打包压缩的模块,但是本文所说的不是以这种方式进行的打包,而是和smarty结合的方式来把网站中的js,css文件...
  • lhzjj
  • lhzjj
  • 2013年11月01日 15:17
  • 915

使用PHP和GZip压缩网站JS/CSS文件加速网站访问速度

一些泛WEB 2.0网站为了追求用户体验,可能会大量使用CSS和JS文件。这就导致在服务器带宽一定的情况下,多用户并发访问速度变慢。如何加快网页响应速度?解决办法之一就是:依照Yahoo性能优化小组提...
  • lasig
  • lasig
  • 2012年01月10日 11:45
  • 646

HTML外部引用CSS文件不生效

作为一个前端小白,鼓捣了几天前端。。今天突然发现我深信不疑的东西,竟然出现了问题。。就比如我在css目录下面写了一个css样式文档:style.css。这时里面只有一句话body { ba...

用js实现根据不同的分辨率和浏览器调用不同的css文件

方法一:(根据ID设定) JavaScript"> if (screen.width == "800") { document.getElementById("MyCS...

JavaScript+CSS实现网页换肤功能

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

Js Css文件压缩工具源码

  • 2012年05月08日 08:54
  • 300KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:根据用户选择用JS切换生效的CSS文件实现网站网页换肤
举报原因:
原因补充:

(最多只允许输入30个字)