我正在使用此脚本来允许用户更改背景颜色...
document.onclick = function SetFavColor(e) {
if (e.target.className == 'AvcGbtn') {
var favColor = e.target.style.backgroundColor;
localStorage.setItem('color', favColor);
document.body.style.backgroundColor = favColor;
console.log(favColor);
}
};
document.addEventListener('DOMContentLoaded', function GetFavColor() {
var favColor = document.body.style.backgroundColor;
var color = localStorage.getItem('color');
if (color === '') {
document.body.style.backgroundColor = favColor;
} else {
document.body.style.backgroundColor = color;
}
});
CSS:
body {
max-width: 100%;
min-width: 100%;
height: 100%;
font-family: normal;
font-style: normal;
font-weight: normal;
background-color: transparent;
}
.AvcGbtn {
display: inline-block;
width: 2em;
height: 2em;
}
HTML:
<span class="AvcGbtn" style="background: #ffffff; background-size: 100% 100%;" rel="nofollow"></span>
<span class="AvcGbtn" style="background: #757575; background-size: 100% 100%;" rel="nofollow"></span>
这是可行的,但是问题是在页面完全加载后,它会显示选定的颜色。我想显示用户在页面加载前选择 的颜色。
示例:背景颜色为白色,而用户选择红色。该脚本在选择之前显示白色背景颜色,而在用户选择红色后,该脚本将背景颜色更改为红色。我该怎么办?
这正是我要使用Javascript的示例CSS
body:before {
background-color: red;
}
答案 0 :(得分:9)
首先,您可以简化设置颜色的逻辑,如下所示:
document.addEventListener('DOMContentLoaded', function GetFavColor() {
var color = localStorage.getItem('color');
if (color != '') {
document.body.style.backgroundColor = color;
}
});
仅在本地存储了某些内容时才需要更改颜色,否则将自动使用CSS中指定的默认颜色。
为了快速进行更改,您可以摆脱任何事件并将脚本放入head
标记内,而不是定位body
元素,而可以定位html
一个由于background propagation,您将获得相同的结果:
<!DOCTYPE html>
<html>
<head>
<!-- coloration -->
<style>html {background:red} /*default color*/</style>
<script>
var color ="blue" /*localStorage.getItem('color')*/;
if (color != '') {
document.documentElement.style.backgroundColor = color;
}
</script>
<!-- -->
</head>
<body>
</body>
</html>
此代码段正在本地更改代码测试以获取更准确的结果。
答案 1 :(得分:4)
您需要使用其他事件onreadystatechange
。这一个在onload
之前触发。我使用了一些功能,并将“橙色”设置为该事件的默认设置,将另一个设置为“单击关闭”按钮,因为我禁用了代码中未包含的Cookie内容。注意;如果您希望脚本能够尽快运行它,请执行此操作。 (红色)代表通话(绿色)代表自我执行。
我添加了console.log
,因此您可以看到事件的确颜色从红色变为橙色到蓝色(发生的很快,请参阅记录时间)
(window.getColor=function (c) {
var favColor = document.body.style.backgroundColor;
var color = !!c ? c : "#FFFAFF"; //getCookie('color');
if (color === '') {
document.body.style.backgroundColor = favColor;
} else {
document.body.style.backgroundColor = color;
}
console.log(color);
})('green');
function setColor(e) {
if (e.target.className == 'AvcGbtn') {
var favColor = e.target.style.backgroundColor;
//setCookie('color', favColor);
document.body.style.backgroundColor = favColor;
console.log(favColor);
} else {
getColor("#DAFFFA");
}
}
document.onreadystatechange = function() {
if (document.readyState === 'complete') {
//dom is ready, window.onload fires later
getColor("orange");
}
};
document.onclick = setColor;
window.onload = function() {
getColor('blue');
};
getColor('red');
body {
max-width: 100%;
min-width: 100%;
height: 100%;
font-family: normal;
font-style: normal;
font-weight: normal;
background-color: transparent;
}
.AvcGbtn {
display: inline-block;
width: 2em;
height: 2em;
}
<span class="AvcGbtn" style="background: #ffffff; background-size: 100% 100%;" rel="nofollow"></span>
<span class="AvcGbtn" style="background: #e8e8e8; background-size: 100% 100%;" rel="nofollow"></span>
答案 2 :(得分:3)
不要忽略老式Javascript的强大功能:在正确的地方(例如,在“ head”标签的末尾)有效地使用document.write。
<head>
<link rel="stylesheet" type="text/css" href="..."/>
<script type="text/javascript">
(function(){
var color = localStorage.getItem('color');
if(typeof(color) === "string" && color != "") {
document.write("<style type=\"text\/css\">body{background-color:" + color + ";}</style>");
}
}());
</script>
</head>
答案 3 :(得分:0)
与其将您的背景颜色更改功能放在window.onload上,不如在打开<script>
标签之后将其放在<body>
标签中:
<html>
...
<body>
<script>
// This js code will be executed before the rest of the page is loaded
</script>
...
</body>
</html>
答案 4 :(得分:0)
由于在处理javascript之前处理了内联CSS,您是否尝试过简单地从内联CSS中删除背景颜色?
document.onclick = function(e) {
if (e.target.className == 'AvcGbtn') {
var favColor = e.target.style.backgroundColor;
setCookie('color', favColor);
document.body.style.backgroundColor = favColor;
console.log(favColor);
}
};
window.onload = function() {
var favColor = document.body.style.backgroundColor;
var color = getCookie('color');
if (color === '') {
document.body.style.backgroundColor = favColor;
} else {
document.body.style.backgroundColor = color;
}
};
body {
max-width: 100%;
min-width: 100%;
height: 100%;
font-family: normal;
font-style: normal;
font-weight: normal;
background-color: transparent;
}
<span class="AvcGbtn" style="background-size: 100% 100%;" rel="nofollow"></span>
<span class="AvcGbtn" style="background-size: 100% 100%;" rel="nofollow"></span>