本文介绍如何使用javascript为两个按钮(“on”和“off”)添加交互逻辑,实现点击“on”时显示一张图片、隐藏另一张,点击“off”时则反之——即精准切换两张图片的可见状态,避免简单隐藏导致视觉残留。
在原始代码中,存在几个关键问题:
- 两张图片均使用 display: none 初始化,但第二张图片未设置 id,无法被JS精准控制;
- “on”按钮仅控制 #my-image 显示,却未处理第二张图的隐藏;
- “off”按钮仅调用 myFunction() 隐藏 #my-image,但未显示第二张图,也未为其添加标识;
- 缺乏状态管理,导致多次点击行为不可预测。
✅ 正确做法是:统一管理两张图片的显隐状态,并通过唯一状态变量或元素属性实现双向切换逻辑。以下是优化后的完整实现:
@@##@@ @@##@@
// JavaScript 控制逻辑(推荐使用状态驱动 + 单一事件绑定)
const imgOn = document.getElementById("img-on");
const imgOff = document.getElementById("img-off");
// 初始化:默认显示 "on" 状态(可选)
imgOn.style.display = "block";
// 为两个按钮分别绑定事件
document.getElementById("btn-on").addEventListener("click", () => {
imgOn.style.display = "block";
imgOff.style.display = "none";
});
document.getElementById("btn-off").addEventListener("click", () => {
imgOn.style.display = "none";
imgOff.style.display = "block";
});
? 进阶技巧(单按钮切换模式):
若希望用一个按钮实现“on/off”切换(类似开关),可改用布尔状态管理:
let isOn = true;
const toggleBtn = document.createElement('button');
toggleBtn.textContent = 'Toggle Pump';
document.body.insertBefore(toggleBtn, document.querySelector('br'));
toggleBtn.addEventListener('click', () => {
if (isOn) {
imgOn.style.display = 'none';
imgOff.style.display = 'block';
toggleBtn.textContent = '→ Turn ON';
} else {
imgOn.style.display = 'block';
imgOff.style.display = 'none';
toggleBtn.textContent = '→ Turn OFF';
}
isOn = !isOn;
});
⚠️ 注意事项: