javascript - 如何将切换更改为图标单击(用于切换到暗模式)
问题描述
我在网站上启用了暗模式。它目前有一个拨动开关,可以将布局从浅色更改为深色,反之亦然。
它使用以下代码:
const toggleSwitch = document.querySelector('.theme-switch input[type="checkbox"]');
const currentTheme = localStorage.getItem('theme');
if (currentTheme) {
document.documentElement.setAttribute('data-theme', currentTheme);
if (currentTheme === 'dark') {
toggleSwitch.checked = true;
}
}
function switchTheme(e) {
if (e.target.checked) {
document.documentElement.setAttribute('data-theme', 'dark');
localStorage.setItem('theme', 'dark');
} else {
document.documentElement.setAttribute('data-theme', 'light');
localStorage.setItem('theme', 'light');
}
}
toggleSwitch.addEventListener('change', switchTheme, false);
<div class="theme-switch-wrapper">
<label class="theme-switch" for="checkbox">
<input type="checkbox" id="checkbox"/>
<div class="slider round"></div>
</label>
<em>DARK</em>
<strong>MODE</strong>
</div>
现在我想升级到一个图标点击。例如,如果启用了浅色模式,点击后应该会看到深色模式的图标,用户将打开深色模式。同样,如果启用了暗模式,则会显示亮模式的图标,如果用户单击它,则会激活亮模式。
感谢您的任何帮助或建议。
解决方案
在 HTML 中制作一个新图像作为标签:
<label class="theme-switch" for="checkbox">
<img width="30" id="switcher" src="">
<input type="checkbox" id="checkbox" />
<div class="slider round"></div>
</label>
那么就可以使用set属性来切换源了
<script>
const switcher = document.querySelector("#switcher");
switcher.setAttribute('src', 'https://vectorified.com/images/switch-button-icon-19.png');
const toggleSwitch = document.querySelector('.theme-switch input[type="checkbox"]');
const currentTheme = localStorage.getItem('theme');
if (currentTheme) {
document.documentElement.setAttribute('data-theme', currentTheme);
if (currentTheme === 'dark') {
toggleSwitch.checked = true;
}
}
function switchTheme(e) {
if (e.target.checked) {
document.documentElement.setAttribute('data-theme', 'dark');
localStorage.setItem('theme', 'dark');
switcher.setAttribute('src', 'https://vectorified.com/images/switch-button-icon-19.png');
} else {
document.documentElement.setAttribute('data-theme', 'light');
localStorage.setItem('theme', 'light');
switcher.setAttribute('src', 'https://image.flaticon.com/icons/png/512/37/37474.png');
}
}
toggleSwitch.addEventListener('change', switchTheme, false);
</script>
推荐阅读
- typescript - 如何在控制器中注入 ts-mockito 模拟对象
- python - python中的lookat矩阵乘法函数对于一个龙精湛的opengl示例是什么?
- jquery - 如何查询 MYSQL 表以获取总体和过去一年内的列出现次数?
- python - 获取 Python Flask 以从 json/dictionary 返回值
- boolean-logic - 需要关于解码器的解释
- python - 如何在图例的同一行上放置多个具有相同标签的符号?
- reactjs - React/Express 在本地读取但在 Heroku 中找不到
- jquery - jquery最接近和克隆问题
- javascript - 将多个文件从 aws 下载到 Node js 服务器
- javascript - 用于显示即将到来的双月星期五日期的脚本