JavaScript(上) | 青训营笔记

38 阅读1分钟

这是我参与 第五届青训营 伴学笔记创作活动的第5天

如何写好JS呢?

写好JS的一些原则

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

各司其职

举例:深夜食堂

版本一:

const btn = document.getElementById('modeBtn');
btn.addEventListener('click', (e) => {
  const body = document.body;
  if(e.target.innerHTML === '🌞') {
    body.style.backgroundColor = 'black';
    body.style.color = 'white';
    e.target.innerHTML = '🌜';
  } else {
    body.style.backgroundColor = 'white';
    body.style.color = 'black';
    e.target.innerHTML = '🌞';
  }
});

版本二:

const btn = document.getElementById('modeBtn');
btn.addEventListener('click', (e) => {
  const body = document.body;
  if(body.className !== 'night') {
    body.className = 'night';
  } else {
    body.className = '';
  }
});

版本三:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>深夜食堂</title>
</head>
<body>
  <input id="modeCheckBox" type="checkbox">
  <div class="content">
    <header>
      <label id="modeBtn" for="modeCheckBox"></label>
      <h1>深夜食堂</h1>
    </header>
    <main>
      <div class="pic">
        <img src="https://p2.ssl.qhimg.com/t0120cc20854dc91c1e.jpg">
      </div>
      <div class="description">
        <p>
        文字叙述
        </p>
      </div>
    </main>
  </div>
</body>
</html>
#modeCheckBox:checked + .content {
  background-color: black;
  color: white;
  transition: all 1s;
}

版本三实现:

image.png

总结

  • HTML/CSS/JS 各司其责

  • 应当避免不必要的由JS

  • 直接操作样式可以用class来表示状态

  • 纯展示类交互寻求零JS方案

组件封装

组件,是指Web页面上抽出来一个个包含模版(HTML)、功能(JS)和样式(CSS)的单元。好的组件具备封装性、正确性、扩展性、复用性。

举例:用原生JS写一个电商网站的轮播图,应该怎么实现?

结构设计:HTML

轮播图是一个典型的列表结构,我们可以使用无序列表<ul>元素来实现。

效果展示:CSS

  • 使用CSS绝对定位将图片重叠在同一个位置

  • 轮播图切换的状态使用修饰符(modifier)

  • 轮播图的切换动画使用CSS transition

行为设计:API

API设计应保证原子操作,职责单一,满足灵活性。

行为设计:控制流

用自定义事件来解耦。

总结 组件封装基本方法:

  • 结构设计

  • 展现效果

  • 行为设计

    API (功能)

    Event(控制流)

2023/1/20