写好 JS 的一些原则

  • 各司其职
  • 组件封装
  • 过程抽象

深夜食堂

深夜食堂 版本一
https://code.h5jun.com/hefaj/edit?js,output

  1. const btn = document.getElementById('modeBtn');
  2. btn.addEventListener('click', (e) => {
  3. const body = document.body;
  4. if(e.target.innerHTML === '🌞') {
  5. body.style.backgroundColor = 'black';
  6. body.style.color = 'white';
  7. e.target.innerHTML = '🌜';
  8. } else {
  9. body.style.backgroundColor = 'white';
  10. body.style.color = 'black';
  11. e.target.innerHTML = '🌞';
  12. }
  13. });

深夜食堂 版本二
https://code.h5jun.com/fapaz/edit?css,js,output

  1. const btn = document.getElementById('modeBtn');
  2. btn.addEventListener('click', (e) => {
  3. const body = document.body;
  4. if(body.className !== 'night') {
  5. body.className = 'night';
  6. } else {
  7. body.className = '';
  8. }
  9. });

深夜食堂 版本三
https://code.h5jun.com/qofoz/edit?html,css,output

  1. <input id="modeCheckBox" type="checkbox">
  2. <div class="content">
  3. <header>
  4. <label id="modeBtn" for="modeCheckBox"></label>
  5. <h1>深夜食堂</h1>
  6. </header>
  7. <main>
  8. </main>
  9. </div>
  10. #modeCheckBox:checked + .content {
  11. background-color: black;
  12. color: white;
  13. transition: all 1s;
  14. }

深夜食堂结论:

  • HTML/CSS/JS 各司其职
  • 应当避免不必要的由JS直接操作样式
  • 可以用 class 来表示状态
  • 纯展示类交互需求零 JS

轮播图