javascript - 用 JavaScript 编写切换 2 状态代码的更好方法是什么?

标签 javascript

所以我正在为我已经实现的网站编写一些代码,这是一个简单的隐藏/显示功能。我一直在思考如何才能编写更短、更简洁或更高效的这段代码或类似代码。

具体来说,如何轻松实现在 2 个 if 语句之间切换的“切换”状态。

let selectedArrow = document.getElementsByClassName('arrows');
let state = 0;
for (let i = 0; i < selectedArrow.length; i++) {
    selectedArrow[i].addEventListener('click', function() {
        let id = event.target;
        let target = event.target.parentElement.nextElementSibling;
        if(state === 0) {
            id.style.transform = 'rotate(-90deg)'
            target.style.display = 'none';
            state = 1;
        } else if(state === 1) {
            id.style.transform = 'rotate(0deg)'
            target.style.display = 'grid';
            state = 0;
        }
    });
}

这段代码工作得很好,只是想知道其他人是否有任何其他技巧,因为我是初学者。

最佳答案

我希望这对您有所帮助,这里我使用 dom 中的标记类来存储状态:

let bindClick = e => e.onclick = e => e.target.classList.toggle('active');
[...document.querySelectorAll('.arrows')].forEach(bindClick)
.arrows {
  border: solid;
  width: 50px;
  display: inline-block;
  line-height: 50px;
  text-align: center;
  font: 44px arial;
  margin: 10px;
  cursor: pointer;
  transition: ease-in 300ms;
}

.active {
  color: red;
  transform: rotate(-45deg);
}
<div class='arrows active'>1</div> <div class='arrows'>2</div> <div class='arrows'>3</div>
<div class='arrows active'>4</div> <div class='arrows'>5</div> <div class='arrows'>6</div>

[...expr] 被使用是因为 forEach 迭代从 document.querySelectorAll 返回的 NodeList dont implemented in some browsers...或不久前实现


如果您不想使用样式来管理状态表示,这里有一个替代方案:

[...document.querySelectorAll('.arrows')].forEach(e => e.onclick = e => {
  e.target.classList.toggle('active');
  let v = e.target.classList.contains('active');
  e.target.style.transform = `rotate(${v ? -45 : 0}deg)`;
  e.target.style.color = v ? 'red' : 'black';
})
.arrows {
  border: solid;
  width: 50px;
  height: 50px;
  display: inline-block;
  line-height: 50px;
  text-align: center;
  font-size: 40px;
  margin: 10px;
  cursor: pointer;
}
<div class='arrows'>1</div> <div class='arrows'>2</div> <div class='arrows'>3</div>
<div class='arrows'>4</div> <div class='arrows'>5</div> <div class='arrows'>6</div>

关于javascript - 用 JavaScript 编写切换 2 状态代码的更好方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55548059/

相关文章:

javascript - chessboardjs 的 Typescript 声明文件(隐式导入)

javascript - 更改location.href后执行函数

javascript - 将光标和焦点置于 contenteditable div onclick 内

javascript - 无需托管的 Firebase 云消息传递(Web/JavaScript)

javascript - 在 ajax 完成后隐藏一个按钮并显示另一个按钮

javascript - 对我不明白的javascript的好处

javascript - d3 : follow mouse coordinates?

javascript - 在 NextJs 的服务器端代码中访问静态资源?

javascript - JS 模板不是由 Heroku 上的 Ruby on Rails 呈现的

Javascript 从数组中检索购物车的值?