javascript - 重复单击图像后,如何将图像更改为其他版本?
问题描述
我正在用 HTML/CSS/JS 制作一个简单的项目。我想让一个灯泡打开和关闭。我将这两个图像都放在同一个目录中,到目前为止,我已经能够制作它,因此当我单击它时它会关闭。但是,在那之后,我不能再点击它了。
我希望能够一次又一次地重复执行此操作,将其关闭,然后再打开。有任何想法吗?我试图在没有教程的情况下做到这一点,我想不出任何东西。
这是我的代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Light Switch</title>
<link rel="stylesheet" href="style.css">
</head>
<body style="background-color: black;">
<img src="light-on.png" onclick="this.src='light-off.png'">
<img src="light-off.png" onclick="this.src='light-on.png'">
</body>
</html>
解决方案
可以通过您的方式创建工作代码,但效率低且不优雅。您只需要一个 img 元素并更改其来源。
<img src="light-on.png" class="image--switchable" data-light="on">
您可以在 img 标签中使用 onclick,但我认为事件监听器是一个更好的解决方案。
let alternation = {
on: "off",
off: "on"
}
// I assume you have multiple images. That's why I used querySelectorAll and forEach.
document.querySelectorAll(".image--switchable").forEach(img => {
img.addEventListener("click", () => {
let light = img.dataset.light;
img.src = `light-${alternation[light]}.png`
img.dataset.light = alternation[light];
})
})
// If you have only one image use:
// document.querySelector(".image--switchable").addEventListener...
推荐阅读
- javascript - 如何将 request-promise 迁移到 axios 或 fetch
- python - 用python掩盖非经典nc文件的纬度和经度区域变量
- ios - XCode 13 构建失败 - XCode 12 工作正常 - 无法构建模块“Darwin”
- google-colaboratory - Colab Pro+:几天出现“无法连接到 GPU 后端”错误
- reactjs - 为什么我的条件检查失败并触发功能?
- java - 将 Java 对象转换为对象列表
- javascript - Lunr.js 在新页面上显示结果
- python - 在旧提交之上强制推送后 InvalidGitRepositoryError
- julia - 尝试在 Julia 中添加 BlossomV 包时出错
- r - 有没有按国家和性别合并两个数据框的方法?