Day3跟着月影学 JavaScript | 青训营笔记

68 阅读2分钟

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

知识要点与个人感悟

一、如何写好JavaScript

  • 书籍推荐
    • 犀牛书(JavaScript权威指南)
    • JavaScript语言精髓
    • 红宝书(JavaScript高级程序设计)

1.各司其职

  • 让HTML、CSS和JavaScript只能分离
  • 例子:

一段JS,控制一个页面,让其支持深色浅色模式:

  1. 利用初始DOM的api:
    >a. 点击按钮,当按钮是什么形状时变字体颜色和背景颜色,代码如下
const btn = document.getElementById( ' modeBtn ' );btn.addEventListener( 'click ', (e ) =→> {
  const body = document.body ;
if( e.target.innerHTML === '1') {
  body.style.backgroundColor = 'black ' ;body .style.color = 'white ' ;
  e.target.innerHTML = '2';}else {
  body.style.backgroundColor = 'white' ;body .style.color = 'black ' ;
  e.target.innerHTML ='1';}
});
  1. 利用class类,定义一个nightclass类夜间模式,判断如果是夜间是添加上class为night的类,否则就默认的class模式
const btn = document.getElementById( ' modeBtn');btn.addEventListener( 'click ', (e)=> {
  const body = document.body;
  if( body.className !== 'night ' ) {
    body.className = 'night ' ;}else {
    body.className = ' ';}
});

上面来看第一个不好的在于他是用JavaScript去控制css的样式,没有行使各司其职的作用,这样后期PM更改需求时,作为开发人员不能很好地去理解原始需求是什么。

3. 因为白天夜间模式控制样式改变应该属于纯CSS改变,可以利用纯CSS实现,不需要JavaScript。

  • 实现原理:只有html和css
    1. 使用css高级功能:伪类选择器匹配元素状态
    2. 给你个checkbox设置一个checked状态
    3. 通过给checked状态设置样式
    4. 对html代码作出相应修改:在一开始放入一个input标签CheckBox,更改为不显示(display:none),并设置一个label标签去for一个元素(这里就是那一个input标签-CheckBox),这样点击这一个label是与直接点击input标签中的CheckBox是一样的。
  • HTML部分
<body>
  <input id="modeCheckBox" type="checkbox"><div class="content">
    <header>
      <label id="modeBtn" for="modeCheckBox"></label><h1>深夜食堂</h1>
    </ header>
    <main>
    </main></div>
</body>
  • CSS部分
#modeCheckBox :checked + .content {
background-color: black;
color: white;
transition: all 1s;}
结论
  • HTML/CSS/JS各司其责
  • 应当避免不必要的由JS直接操作样式可以用class来表示状态
  • 纯展示类交互寻求零JS方案

2. 组件封装

  • 好的UI组件具备正确性、扩展性、复用性

3. 过程抽象

  • 应用函数式编程思想