Javascript 在2个样式表之间切换,并使用本地存储永久保存用户首选项
我有两个图像(一个月亮和一个太阳)和两个不同的黑暗和光明页面主题样式表。默认为暗模式。要更改为灯光模式,请单击太阳图像 我可以在样式表之间切换。但是,我不知道如何存储所选主题。我希望用户能够保留他们的风格偏好,即使在刷新页面或更改页面(在同一网站上)后也是如此 我在下面列出了一些代码示例。我希望有人能帮助我理解本地存储 相关htmlJavascript 在2个样式表之间切换,并使用本地存储永久保存用户首选项,javascript,html,css,local-storage,Javascript,Html,Css,Local Storage,我有两个图像(一个月亮和一个太阳)和两个不同的黑暗和光明页面主题样式表。默认为暗模式。要更改为灯光模式,请单击太阳图像 我可以在样式表之间切换。但是,我不知道如何存储所选主题。我希望用户能够保留他们的风格偏好,即使在刷新页面或更改页面(在同一网站上)后也是如此 我在下面列出了一些代码示例。我希望有人能帮助我理解本地存储 相关html <link href="normalize.css" rel="stylesheet" type="
<link href="normalize.css" rel="stylesheet" type="text/css">
<link id="theme" rel="stylesheet" type="text/css" href="styles-dark.css" />
<link href="https://fonts.googleapis.com/css2?family=Raleway:wght@400;600;700&display=swap" rel="stylesheet">
<link class="favicon" rel="icon" href="./favicon.ico" />
</head>
<body>
<header id="flex-box-header">
<h1 id="nameHeading">MY NAME</h1>
<!-- 'Dark Mode' will be the default -->
<div class="toggle">
<div class="tooltip">
<img class="displayButton" id="dark" src="moon - light.png" alt="dark mode" width="90.82px" height="76px">
<span class="tooltiptext" id="textDark">Dark Mode</span>
</div>
<div class="tooltip">
<img class="displayButton" id="light" src="sun.jpg" alt="light mode" width="83.56px" height="62.02px">
<span class="tooltiptext" id="textLight">Light Mode</span>
</div>
</div>
</header>
我终于明白了!
它有FOIT(不正确主题的闪光),但我只是松了一口气,用户的偏好正在保存。改天我会致力于消除FOIT
JavaScript
// Button selection
const buttonLight = document.getElementById("light");
const buttonDark = document.getElementById("dark");
// Style selection
const lightStyle = "styles-light.css";
const darkStyle = "styles-dark.css";
// Select the stylesheet <link>
const theme = document.getElementById("theme");
function lightFunction() {
theme.href = lightStyle;
// different sun for dark theme
document.getElementById("light").src="sun - light.png";
document.querySelector(".favicon").href = "favicon-light.ico";
window.localStorage.setItem('theme', 'light');
}
function darkFunction() {
theme.href = darkStyle;
// different sun for dark theme
document.getElementById("light").src="sun.jpg";
document.querySelector(".favicon").href = "favicon.ico";
window.localStorage.setItem('theme', 'dark');
}
// Listen for a click on the sun button (buttonLight)
buttonLight.addEventListener("click", lightFunction);
// Listen for a click on the moon button (buttonDark)
buttonDark.addEventListener("click", darkFunction);
const currentTheme = localStorage.getItem("theme");
if (currentTheme == "dark") {
darkFunction();
} else {
lightFunction();
}
//按钮选择
const buttonLight=document.getElementById(“light”);
const buttonDark=document.getElementById(“暗”);
//风格选择
const lightStyle=“styles light.css”;
const darkStyle=“styles dark.css”;
//选择样式表
const theme=document.getElementById(“主题”);
函数lightFunction(){
theme.href=lightStyle;
//黑暗主题的不同太阳
document.getElementById(“light”).src=“sun-light.png”;
document.querySelector(“.favicon”).href=“favicon light.ico”;
setItem('theme','light');
}
函数darkFunction(){
theme.href=darkStyle;
//黑暗主题的不同太阳
document.getElementById(“light”).src=“sun.jpg”;
document.querySelector(“.favicon”).href=“favicon.ico”;
setItem('theme','dark');
}
//聆听太阳按钮(按钮灯)上的点击
buttonLight.addEventListener(“单击”,lightFunction);
//听月亮按钮(按钮标记)上的点击
按钮标记。addEventListener(“单击”,暗色功能);
const currentTheme=localStorage.getItem(“主题”);
如果(当前主题==“暗”){
暗函数();
}否则{
lightFunction();
}
为此使用CSS变量这是否回答了您的问题?你好。我已经知道如何使用按钮更改样式表,但我不知道如何存储用户首选项。感谢您的建议,但本地存储解决方案的哪些方面不起作用?它只是不记得主题吗?重做主题需要一点时间吗?主题是否仅在单击时重新应用?你的确切期望是什么?现在发生了什么?你是如何调试它的?嗨@zero298我只是不知道如何正确地实现它。在上面的例子中,“尝试使用本地存储而失败”,它甚至根本不会在主题之间切换。当您单击太阳图像时,它会闪烁一次,然后停留在黑暗主题上,而不是切换到光明主题。我读了很多书,不知道如何用两个CSS文件实现本地存储。似乎大多数示例都使用类。
function toggle(theme) {
var styleSheet = document.getElementById("theme");
if (theme != styleSheet.href) styleSheet.href = theme;
document.getElementById("light").src.onClick = styleSheet.href === "styles-light.css";
}
window.addEventListener("click", function() {
var theme = localStorage.getItem("theme") || document.getElementById("theme").href;
toggle(theme);
document.getElementById("light").addEventListener("click", function() {
var theme = this.onClick ? "styles-light.css" : "styles-dark.css"
toggle(theme);
localStorage.setItem("theme", theme);
})
})
// Button selection
const buttonLight = document.getElementById("light");
const buttonDark = document.getElementById("dark");
// Style selection
const lightStyle = "styles-light.css";
const darkStyle = "styles-dark.css";
// Select the stylesheet <link>
const theme = document.getElementById("theme");
function lightFunction() {
theme.href = lightStyle;
// different sun for dark theme
document.getElementById("light").src="sun - light.png";
document.querySelector(".favicon").href = "favicon-light.ico";
window.localStorage.setItem('theme', 'light');
}
function darkFunction() {
theme.href = darkStyle;
// different sun for dark theme
document.getElementById("light").src="sun.jpg";
document.querySelector(".favicon").href = "favicon.ico";
window.localStorage.setItem('theme', 'dark');
}
// Listen for a click on the sun button (buttonLight)
buttonLight.addEventListener("click", lightFunction);
// Listen for a click on the moon button (buttonDark)
buttonDark.addEventListener("click", darkFunction);
const currentTheme = localStorage.getItem("theme");
if (currentTheme == "dark") {
darkFunction();
} else {
lightFunction();
}