javascript實現css主題樣式切換;動態改變引入的css文件

一個頁面要顯示不同的主題風格,就需要寫不同的css文件;
在做不同css文件相互切換時,首先要了解link標籤中的rel屬性;
rel屬性值:

alternate文檔的替代版本(比如打印頁、翻譯或鏡像)。
stylesheet 文檔的外部樣式表。
start 集合中的第一個文檔。
next 集合中的下一個文檔。
prev 集合中的上一個文檔。
contents 文檔的目錄。
index 文檔的索引。
glossary 在文檔中使用的詞彙的術語表(解釋)。
copyright 包含版權信息的文檔。
chapter 文檔的章。
section 文檔的節。
subsection 文檔的小節。
appendix 文檔的附錄。
help 幫助文檔。
bookmark 相關文檔。
一般我們在頁面中引入樣式使用的屬性是stylesheet;如:
< link rel=’stylesheet’ type=’text/css’ href=’a.cc’>
這裏我們要用到alternate屬性,用來替換css文件:
html:

CSS主題切換

其中第一個link標籤中的rel屬性值爲stylesheet,就是當前頁面所加載顯示的css樣式文件;
第二個alternate stylesheet就是用來做替換用的,寫在head中時不會被顯示出來,但是會重服務器中加載到瀏覽器中;
這時候就需要寫一個javascript方法來做觸發,替換;

// 對切換主題的按鈕綁定事件,用來做觸發
document.getElementById(“sheet-a”).addEventListener(“click”,function(){
setStyleSheet(“a”);
});
document.getElementById(“sheet-b”).addEventListener(“click”,function(){
setStyleSheet(“b”);
});
/**

  • 查找所有的link標籤,找到符合條件的css進行切換
  • @title:需要切換的css文件名稱,也可以是某值,主要是能夠找到所要切換的link標籤
    **/
    function setStyleSheet(title){
    // 首先找到DOM中所有的link標籤
    var link_list = document.getElementsByTagName(“link”);
    if ( link_list ){
    for ( var i=0;i<link_list.length;i++ ){
    // 要找到所有link中rel屬性值包括style的,也就是包括stylesheet和alternate stylesheet;
    if ( link_list[i].getAttribute(“rel”).indexOf(“style”) != -1 ){
    // 將符合條件的link的disabled的屬性設爲true,都改爲禁用;
    link_list[i].disabled = true;
    // 然後判斷link標籤中的title屬性,找到我們需要替換的css文件
    // 找到後將該link的disabled改爲啓用;
    if ( link_list[i].getAttribute(“title”) === title){
    link_list[i].disabled = false;
    }
    }
    }
    }
    };

通過以上方法,可以實現css文件切換,但是有個問題就是,如果我們所需要切換的css文件比較多怎麼辦:
如下,我們還能在head中寫許多個link標籤麼,這麼做顯然會顯得頁面很臃腫不美觀:

...

之後想到的是動態的創建link標籤,在添加到head中:

CSS主題切換

js:

/**

  • 替換css樣式文件;
  • @param title:替換的css樣式文件名稱及路徑
  • auth:JYX time:2016.07.28
    */
    function setStyleSheet(title){
    // 找到head
    var doc_head = document.head;
    // 找到所有的link標籤
    var link_list = document.getElementsByTagName(“link”);
    if ( link_list ){
    for ( var i=0;i<link_list.length;i++ ){
    // 找到我們需要替換的link,
    // 一般情況下有些樣式是公共樣式,我們可以寫到功能樣式文件中,不用來做替換;
    // 這樣可以避免每次替換的時候樣式文件都很大;可以節省加載速度;
    if ( link_list[i].getAttribute(“ty”) === “theme” ){
    // 找到後將這個link標籤重head中移除
    doc_head.removeChild(link_list[i]);
    }
    }
    }
    // 創建一個新link標籤
    var link_style = document.createElement(“link”);
    // 對link標籤中的屬性賦值
    link_style.setAttribute(“rel”,“stylesheet”);
    link_style.setAttribute(“type”,“text/css”);
    link_style.setAttribute(“href”,title);
    link_style.setAttribute(“ty”,“theme”);
    // 加載到head中最後的位置
    doc_head.appendChild(link_style);
    };

原文:https://blog.csdn.net/J_Y_X_8/article/details/52056879

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章