javascript - 暗模式+更改图片来源
问题描述
所以我在我的网站上实施了暗模式,但是我需要更改一些图片才能使其正常运行。我有我需要的图像的明暗版本,但我想知道在启用暗模式时是否有任何方法可以更改图像的来源。
我从这个视频中得到了我的代码:https ://www.youtube.com/watch?v=wodWDIdV9BY
这是我的暗模式按钮和 HTML 中的图像:
<button onclick="changeImage();" id="dark-mode-toggle" class="dark-mode-toggle">Darkmode On/Off</button>
启用暗模式的 Javascript(请参阅上面的 youtube 链接):
let darkMode = localStorage.getItem('darkMode');
const darkModeToggle = document.querySelector('#dark-mode-toggle');
const enableDarkMode = () => {
document.body.classList.add('darkmode');
localStorage.setItem('darkMode', 'enabled');
}
const disableDarkMode = () => {
document.body.classList.remove('darkmode');
localStorage.setItem('darkMode', null);
}
if (darkMode === 'enabled') {
enableDarkMode();
}
darkModeToggle.addEventListener('click', () => {
darkMode = localStorage.getItem('darkMode');
if (darkMode !== 'enabled') {
enableDarkMode();
} else {
disableDarkMode();
}
});
这是我尝试过的
let darkMode = localStorage.getItem('darkMode');
const darkModeToggle = document.querySelector('#dark-mode-toggle');
const enableDarkMode = () => {
document.getElementById('icon').src="images/twar-white-icon.png"
document.body.classList.add('darkmode');
localStorage.setItem('darkMode', 'enabled');
}
const disableDarkMode = () => {
document.getElementById('icon').src="images/twar-black-icon.png"
document.body.classList.remove('darkmode');
localStorage.setItem('darkMode', null);
}
if (darkMode === 'enabled') {
enableDarkMode();
}
darkModeToggle.addEventListener('click', () => {
darkMode = localStorage.getItem('darkMode');
if (darkMode !== 'enabled') {
enableDarkMode();
} else {
disableDarkMode();
}
});
基本上我添加的是 document.getElementById('icon').src="images/twar-white-icon.png"
和document.getElementById('icon').src="images/twar-black-icon.png"
但我在控制台日志中不断收到“Uncaught TypeError: Cannot set property 'src' of null”的错误。我需要将图像源更改为启用和禁用的暗模式,因为该功能已保存在 localStorage 上,它会记住上次访问时所做的设置。图像的来源必须基于是否启用了暗模式。
解决方案
编写的 Javascript 是正确的,但我收到了 id 为空的错误消息。这是因为我将 script 标签放在 image 标签之上,一旦我将它移到 body 标签下,它就会读取 id 并执行该功能。
推荐阅读
- azure - ASP.NET Core 2.2 - 密码重置在 Azure 上不起作用(无效令牌)
- android - android:背景没有反映在布局权重的视图中
- java - 从音频/文本文件中读取输入并将其设置为 v1alpha1 谷歌助手作为 Android 中的 ConverseRequest
- ios - collectionView 图像:在 Swift 中动态更改高度
- c# - 如何在 Asp.Net Core 2.1 项目中使用 EF Core 2.2.4 数据库
- php - 如何使用第一个字母作为选择选项按字母顺序列出 mysql 数据
- python - 具有时间相关 Dirichlet 边界条件的非稳态扩散-平流方程
- dialogflow-es - 用户存储不持久
- python - 使用 Python 抓取产品类别
- angular - 角度弹性布局错误:没有导出成员 ɵNgClassImpl 错误