暗模式选择不保存在本地存储中
Dark mode selection not saving in local storage
我正在尝试为我的网站添加深色模式。单击事件正在工作,并将在默认(深色)模式和选定(浅色)模式之间切换。但是,如果刷新页面或用户导航到另一个屏幕,站点将重置为默认模式,这些更改将不会生效。我认为我的问题出在本地存储的实现上,但我不知道哪里出了问题。
// local storage initiation
function localStorageSupported() {
try {
return "localStorage" in window && window["localStorage"] !== null;
} catch (e) {
return false;
}
}
console.log('checking local storage' + localStorage.getItem(localStorage))
// dark mode listener
var checkbox = document.querySelector('input[name=theme]');
checkbox.addEventListener('change', function() {
if(this.checked) {
trans()
document.documentElement.setAttribute('data-theme', 'selected'),
localStorage.setItem('theme', 'selected')
} else {
trans()
document.documentElement.setAttribute('data-theme', 'default'),
localStorage.setItem('theme', 'default')
}
console.log('click click boom' + checkbox)
})
// transition from default to selected theme
let trans = () => {
document.documentElement.classList.add('transition');
window.setTimeout(() => {
document.documentElement.classList.remove('transition')
}, 1000)
}
console.log('which theme am I...' + localStorage.getItem('theme'))
// store user preference
var data = localStorage.getItem('theme');
console.log('I have stored...' + localStorage.getItem('theme'))
<div class="toggle-container" id="navigationLink9">
<input type="checkbox" id="switch" name="theme" />
<label for="switch"> <span id="toggleDay">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<path
d="M4.069 13h-4.069v-2h4.069c-.041.328-.069.661-.069 1s.028.672.069 1zm3.034-7.312l-2.881-2.881-1.414 1.414 2.881 2.881c.411-.529.885-1.003 1.414-1.414zm11.209 1.414l2.881-2.881-1.414-1.414-2.881 2.881c.528.411 1.002.886 1.414 1.414zm-6.312-3.102c.339 0 .672.028 1 .069v-4.069h-2v4.069c.328-.041.661-.069 1-.069zm0 16c-.339 0-.672-.028-1-.069v4.069h2v-4.069c-.328.041-.661.069-1 .069zm7.931-9c.041.328.069.661.069 1s-.028.672-.069 1h4.069v-2h-4.069zm-3.033 7.312l2.88 2.88 1.415-1.414-2.88-2.88c-.412.528-.886 1.002-1.415 1.414zm-11.21-1.415l-2.88 2.88 1.414 1.414 2.88-2.88c-.528-.411-1.003-.885-1.414-1.414zm2.312-4.897c0 2.206 1.794 4 4 4s4-1.794 4-4-1.794-4-4-4-4 1.794-4 4zm10 0c0 3.314-2.686 6-6 6s-6-2.686-6-6 2.686-6 6-6 6 2.686 6 6z"
id="sunIcon" />
</svg> </span>
<svg height="25" width="50">
<line x1="10" y1="0" x2="35" y2="35" style="stroke:#f48847;stroke-width: 2.25" />
</svg>
<span id="toggleNight">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<path
d="M22 12c0 5.514-4.486 10-10 10-4.826 0-8.864-3.436-9.797-7.99 3.573.142 6.903-1.818 8.644-5.013 1.202-2.206 1.473-4.679.83-6.992 5.608-.194 10.323 4.338 10.323 9.995zm-10-12c-1.109 0-2.178.162-3.197.444 3.826 5.933-2.026 13.496-8.781 11.128l-.022.428c0 6.627 5.373 12 12 12s12-5.373 12-12-5.373-12-12-12z"
id="moonIcon" />
</svg>
</span></label>
</div>
html {
background-color: #e9ecef;
margin: 0;
padding: 0;
font-family: 'Bebas Neue', cursive;
font-family: 'Roboto', sans-serif;
--bg: #282d30;
--bg-box: #282d30;
--bg-panel: black;
--color-button: #f48847;
--color-headings: #f48847;
--color-stroke: #f48847;
--color-shadow: inset 0 0 1em #e9ecef;
--color-box-shadow: 0 1px 0.125em #e9ecef;
--color-text: #e9ecef;
--color-off: #e9ecef;
--color-on: #9e9e9e;
--color-button-text: #e9ecef;
--color-link: #e9ecef;
--color-link-hover: #282d30;
--color-line: #f48847;
}
html[data-theme='selected'] {
--bg: #e9ecef;
--bg-box: #e9ecef;
--bg-panel: #282d30;
--color-button: #282d30;
--color-headings: #282d30;
--color-stroke: #282d30;
--color-shadow: inset 0 0 1em #282d30;
--color-box-shadow: 0 1px 0.125em #282d30;
--color-text: #282d30;
--color-off: #9e9e9e;
--color-on: #e9ecef;
--color-button-text: #e9ecef;
--color-link: #e9ecef;
--color-link-hover: #f48847;
--color-line: #e9ecef;
}
我相信它可以更干净,但这就是我所在的位置。有什么建议么?感谢您的帮助。
当页面加载时,您需要从 localStorage
中检索主题并进行设置。
let prev = localStorage.getItem('theme') || 'default';
document.documentElement.setAttribute('data-theme', prev);
checkbox.checked = prev === 'selected';
我正在尝试为我的网站添加深色模式。单击事件正在工作,并将在默认(深色)模式和选定(浅色)模式之间切换。但是,如果刷新页面或用户导航到另一个屏幕,站点将重置为默认模式,这些更改将不会生效。我认为我的问题出在本地存储的实现上,但我不知道哪里出了问题。
// local storage initiation
function localStorageSupported() {
try {
return "localStorage" in window && window["localStorage"] !== null;
} catch (e) {
return false;
}
}
console.log('checking local storage' + localStorage.getItem(localStorage))
// dark mode listener
var checkbox = document.querySelector('input[name=theme]');
checkbox.addEventListener('change', function() {
if(this.checked) {
trans()
document.documentElement.setAttribute('data-theme', 'selected'),
localStorage.setItem('theme', 'selected')
} else {
trans()
document.documentElement.setAttribute('data-theme', 'default'),
localStorage.setItem('theme', 'default')
}
console.log('click click boom' + checkbox)
})
// transition from default to selected theme
let trans = () => {
document.documentElement.classList.add('transition');
window.setTimeout(() => {
document.documentElement.classList.remove('transition')
}, 1000)
}
console.log('which theme am I...' + localStorage.getItem('theme'))
// store user preference
var data = localStorage.getItem('theme');
console.log('I have stored...' + localStorage.getItem('theme'))
<div class="toggle-container" id="navigationLink9">
<input type="checkbox" id="switch" name="theme" />
<label for="switch"> <span id="toggleDay">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<path
d="M4.069 13h-4.069v-2h4.069c-.041.328-.069.661-.069 1s.028.672.069 1zm3.034-7.312l-2.881-2.881-1.414 1.414 2.881 2.881c.411-.529.885-1.003 1.414-1.414zm11.209 1.414l2.881-2.881-1.414-1.414-2.881 2.881c.528.411 1.002.886 1.414 1.414zm-6.312-3.102c.339 0 .672.028 1 .069v-4.069h-2v4.069c.328-.041.661-.069 1-.069zm0 16c-.339 0-.672-.028-1-.069v4.069h2v-4.069c-.328.041-.661.069-1 .069zm7.931-9c.041.328.069.661.069 1s-.028.672-.069 1h4.069v-2h-4.069zm-3.033 7.312l2.88 2.88 1.415-1.414-2.88-2.88c-.412.528-.886 1.002-1.415 1.414zm-11.21-1.415l-2.88 2.88 1.414 1.414 2.88-2.88c-.528-.411-1.003-.885-1.414-1.414zm2.312-4.897c0 2.206 1.794 4 4 4s4-1.794 4-4-1.794-4-4-4-4 1.794-4 4zm10 0c0 3.314-2.686 6-6 6s-6-2.686-6-6 2.686-6 6-6 6 2.686 6 6z"
id="sunIcon" />
</svg> </span>
<svg height="25" width="50">
<line x1="10" y1="0" x2="35" y2="35" style="stroke:#f48847;stroke-width: 2.25" />
</svg>
<span id="toggleNight">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<path
d="M22 12c0 5.514-4.486 10-10 10-4.826 0-8.864-3.436-9.797-7.99 3.573.142 6.903-1.818 8.644-5.013 1.202-2.206 1.473-4.679.83-6.992 5.608-.194 10.323 4.338 10.323 9.995zm-10-12c-1.109 0-2.178.162-3.197.444 3.826 5.933-2.026 13.496-8.781 11.128l-.022.428c0 6.627 5.373 12 12 12s12-5.373 12-12-5.373-12-12-12z"
id="moonIcon" />
</svg>
</span></label>
</div>
html {
background-color: #e9ecef;
margin: 0;
padding: 0;
font-family: 'Bebas Neue', cursive;
font-family: 'Roboto', sans-serif;
--bg: #282d30;
--bg-box: #282d30;
--bg-panel: black;
--color-button: #f48847;
--color-headings: #f48847;
--color-stroke: #f48847;
--color-shadow: inset 0 0 1em #e9ecef;
--color-box-shadow: 0 1px 0.125em #e9ecef;
--color-text: #e9ecef;
--color-off: #e9ecef;
--color-on: #9e9e9e;
--color-button-text: #e9ecef;
--color-link: #e9ecef;
--color-link-hover: #282d30;
--color-line: #f48847;
}
html[data-theme='selected'] {
--bg: #e9ecef;
--bg-box: #e9ecef;
--bg-panel: #282d30;
--color-button: #282d30;
--color-headings: #282d30;
--color-stroke: #282d30;
--color-shadow: inset 0 0 1em #282d30;
--color-box-shadow: 0 1px 0.125em #282d30;
--color-text: #282d30;
--color-off: #9e9e9e;
--color-on: #e9ecef;
--color-button-text: #e9ecef;
--color-link: #e9ecef;
--color-link-hover: #f48847;
--color-line: #e9ecef;
}
我相信它可以更干净,但这就是我所在的位置。有什么建议么?感谢您的帮助。
当页面加载时,您需要从 localStorage
中检索主题并进行设置。
let prev = localStorage.getItem('theme') || 'default';
document.documentElement.setAttribute('data-theme', prev);
checkbox.checked = prev === 'selected';