首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当单击javascript时,我如何在图标之间切换?

当单击javascript时,我如何在图标之间切换?
EN

Stack Overflow用户
提问于 2022-08-22 13:10:43
回答 3查看 71关注 0票数 -5

单击javascript时,如何在图标之间切换?

代码语言:javascript
复制
function mode() {
  var moon = document.getElementById("mode");
  moon.src = "https://img.icons8.com/sf-black-filled/35/fffffe/moon-symbol.png";
  moon.id = "lightmode";
  moon.onclick = lightmode();
}

function lightmode() {
  var sun = document.getElementById("lightmode");
  sun.src = "https://img.icons8.com/sf-black-filled/34/000000/sun.png";
  sun.onclick = mode();
}
代码语言:javascript
复制
body { background-color:grey }
代码语言:javascript
复制
<div class="nav-icons">
  <img id="mode" class="moon" onclick="mode()" src="https://img.icons8.com/sf-black-filled/35/fffffe/moon-symbol.png">
  <img id="notification" src="https://img.icons8.com/ios-glyphs/34/fffffe/notification-center.png" alt="" srcset="">
</div>

EN

回答 3

Stack Overflow用户

发布于 2022-08-22 13:16:43

您正在以不正确的方式设置事件侦听器。

下面是使用类和数据属性的切换

代码语言:javascript
复制
const srcs = {
  "dark": "https://img.icons8.com/sf-black-filled/35/fffffe/moon-symbol.png",
  "light": "https://img.icons8.com/sf-black-filled/34/000000/sun.png"
};
const modeToggle = document.getElementById("modeToggle");
modeToggle.addEventListener("click", function() {
  let mode = this.dataset.mode;
  mode = mode === "dark" ? "light" : "dark"; // toggle
  this.src = srcs[mode]; // image
  this.dataset.mode = mode; // save in element
  document.body.classList.toggle("dark",mode==="dark"); // toggle page too
})
document.body.classList.toggle("dark",modeToggle.dataset.mode==="dark"); // initialise the page, possibly from localStorage
代码语言:javascript
复制
body {
  background-color: grey
}

body.dark {
  background-color: black;
}
代码语言:javascript
复制
<div class="nav-icons">
  <img id="modeToggle" data-mode="light" src="https://img.icons8.com/sf-black-filled/34/000000/sun.png">
  <img id="notification" src="https://img.icons8.com/ios-glyphs/34/fffffe/notification-center.png" alt="" srcset="">
</div>

票数 1
EN

Stack Overflow用户

发布于 2022-08-22 13:20:17

这可能解决您的问题,请为您的函数使用正确的名称,例如,使用changeMode()代替mode()作为名称

javascript:

代码语言:javascript
复制
let isChanged = false;
let mode = document.querySelector('#mode');

function changeMode(){
  isChanged = !isChanged;
  if(isChanged) {
    mode.src = "https://img.icon8.com/sf-black-filled/35/ffffffe/moon-symbol.png"
  } else {
    mode.src = "https://img.icon8.com/sf-black-filled/34/000000/sun.png"
  }
}
票数 0
EN

Stack Overflow用户

发布于 2022-08-22 13:33:32

在Javascript中,在两个不同的图像/图标/样式之间切换非常简单。例如,您可以为两个图标创建一个具有名称/值对的简单对象文字,如下所示。一个简单的ternary运算符根据当前的src确定src应该是什么。

代码语言:javascript
复制
document.querySelector('.nav-icons > img.sunmoon').addEventListener('click',function(e){
  let icons={
    sun:'https://img.icons8.com/sf-black-filled/34/000000/sun.png',
    moon:'https://img.icons8.com/sf-black-filled/35/fffffe/moon-symbol.png'
  };
  this.src = this.src==icons.moon ? icons.sun : icons.moon;
});
代码语言:javascript
复制
body {
  background-color: grey
}
代码语言:javascript
复制
<div class="nav-icons">
  <img class="sunmoon" src="https://img.icons8.com/sf-black-filled/35/fffffe/moon-symbol.png" />
  <img id="notification" src="https://img.icons8.com/ios-glyphs/34/fffffe/notification-center.png" alt="" srcset="" />
</div>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73445701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档