JS 鼠标点击切换网站颜色样式方法

老白 4个月前 196浏览 0评论

在建站的时候,偶尔可能需要用到一个功能:切换网站颜色样式,今天就介绍几个通过JS方式切换网站颜色样式的方法:

一、在我以前的印象里,页面的字体属性,背景,等样式在页面加载后基本上都是固定的了,但是今天看到可以通过js修改页面的样式,觉得有必要和大家分享下。

JS切换样式.png JS 鼠标点击切换网站颜色样式方法 js/jQuery

<html>
<head>
<meta http-equiv="content-Type" content="text/html; charset=GB18030">
<title>css ajax</title>
<script type ="text/javascript" src ="test.js">
</script>
<link href ="styles.css" type ="text/css" rel ="stylesheet"/>
</head>
<body >
<table id ="table" >
  <tr>
    <th id ="tableHead"> Product Name </th>
  </tr>
  <tr>
    <td id ="tableFirstLine"> AirPlane </td>
  </tr>
  <tr>
    <td id ="tableSecondLine"> Big car </td>
  </tr>
</table>
<br/>
<input type ="button" value ="set style 1" onclick ="setStyle1()"/>
触发事件改变页面的样式
<input type ="button" value ="set style 2" onclick ="setStyle2()"/>
触发事件改变页面样式
</body>
</html>

 现在页面的文字样式,背景,字体大小,都是系统默认的,待会儿,给大家演示下运行结果,可以比较下哦

JS文件:

function setStyle1(){  //将表的风格改为style1
    //获取html的引用
    oTable = document.getElementById("table");
    oTableHead = document.getElementById("tableHead");
    oTableFirstLine =document.getElementById("tableFirstLine");
    otableSecondLine = document.getElementById("tableSecondLine");
    //设置风格
     oTable.className ="Table1";
     oTableHead.className ="TableHead1";
     oTableFirstLine.className ="TableContent1";
     oTableSecondLine.classNamee ="TableContent1";
}

function setStyle2(){    //将表格的风格改为style2
    //获取html元素的引用
    oTable = document.getElementById("table");
    oTableHead = document.getElementById("tableHead");
    oTableFirstLine =document.getElementById("tableFirstLine");
    otableSecondLine = document.getElementById("tableSecondLine");
    //设置风格
     oTable.className ="Table2";
     oTableHead.className ="TableHead2";
     oTableFirstLine.className ="TableContent2";
     oTableSecondLine.classNamee ="TableContent2";

}

CSS:

/* @CHARSET "GB18030"; */
.Table1
{
    border:DarkGreen 1px solid;
    background-color:LightGreen;
}
.TableHead1
{
    font-family:Verdana,Arial;
    font-weight:bold;
    font-size:10pt;
}
.TableContent1
{
    font-family:Verdana,Arial;
    font-size:10pt;
}
.Table2
{
    border:DarkBlue 1px solid;
    background-color:LightBlue;
}
.TableHead2
{
    font-family:Verdana,Arial;
    font-weight:bold;
    font-size:10pt;
}
.TableContent2
{
    font-family:Verdana,Arial;
    font-size:10pt;
}

 二、先说结论,总结成一句话就是 “加载对应的css,后加载的css覆盖默认显示样式,即可达到换主题的目的”,具体的实现分为2步: 准备两份不同主题的css 使用js实现切换(加载)css的方法

生成不同主题的css不同主题的css差异主要体现在颜色这个概念上,理论上只要有使用颜色的地方都需要进行适当的调整,比如文字颜色,背景色,边框颜色等等。简单来说就是白底陪黑字,黑底用白字,如果是采用了灰度色,则根据现实情况进行适度调整或无需调整。最简单的调整颜色的方法是使用适当的工具来生成css,比如less,scss等。

具体请看文章:http://www.w2bc.com/article/209505

三、CSS样式切换技巧 - 动态更换网页色彩皮肤

样式与数据分离所带来的不只是符合标准这样的简单,样式既然与数据分离那么样式的切换则变得理所当然的了!但是网上这样的中文教程实在是太少了!所以我收集了一部分中外网站已经实现的技术资料整理出来供网友参考。
首先要具备不同内容的CSS文件(最好每个文件代表一种样式,或是代表需要作出变动的部分)。这里以三个为例:
第一个是背景为红色的CSS文件(red.css)CSS中的内容为: 
Copy code
body {background-color:red;}
第二个是背景为绿色的CSS文件(green.css)CSS中的内容为:
Copy code
body {background-color:green;}
第三个是背景为黄色的CSS文件(yellow.css)CSS中的内容为:
Copy code
body {background-color:yellow;}
然后在xthml文件中加入这三个CSS的链接
Copy code
<link rel="alternate stylesheet" href=\'#\'" type="text/css" title="red" media="screen, projection"/> 
<link rel="stylesheet" href="green.css" type="text/css" title="green" media="screen, projection"/> 
<link rel="alternate stylesheet" href="yellow.css" type="text/css" title="yellow" media="screen, projection"/>
这三个中除了title不一样外还有一个地方有所不同,那就是REL。第一个与第三个都是alternate stylesheet只有第二个是stylesheet。这第二个就是当然样式。
在链接下面再导入一个JS文件,用来控制这个样式切换
Copy code
function setActiveStyleSheet(title) { 
  var i, a, main; 
  if (title) { 
  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; 
}

在合适的地方加入三个切换按钮
Copy code
<a href=\'#\'" :void()" return false;" title="红色样式"></a> 
<a href=\'#\'" :void()" return false;" title="绿色样式"></a> 
<a href=\'#\'" :void()" return false;" title="黄色样式"></a> 
<a href=\'#\'" :void()" return false;" title="没有样式"></a>
好了发布试试点那三个切换链接!是不是已经切换了样式?

补遗:带有记忆功能的JS文档
Copy code
function 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);

评论