JavaScript(1) | 青训营笔记

112 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第6天

已经不想摆烂啦

自己也是从今年的3月份开始学习的前端,本以为关于JavaScript这些基础知识,已经掌握的还可以了,代码也会写了,与页面的交互操作也会完成,但是,青训营的这个课程,让我感受到了,写JavaScript不是想象中的那么简单...

课程ppt标题:《如何写  JavaScript》

2022-08-08_202527.png

这个 字 一开始还真没注意,当听完课,回过头来做笔记时,这个好,确实映入我的心里。

这节课的三个要点 之一
1.各司其责

让HTML、CSS和JavaScript职能分离。

在我当时看网上的课程,开始学习html css javascript 时 我是从来没有听说过,这种概念,各司其责 职能分离 我当时就在想:这不是肯定的吗,做自己该做的事情,css就做样式,js就做交互啊...

继续听课

首先来到了本节课的第一个案例:主题模式的转换(白天模式🌞 / 夜间模式🌜)

(我的想法)这个倒是非常简单了:不就是变换css样式吗,点击按钮变换呗。

2022-08-08_203648.png

然后给出了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.querySelector('#modeBtn')
btn.addEventListener('click', (e) => {
    const body = document.body;
    body.className === '' ? body.className = 'night' : body.className = '';
})

因为一个是默认的样式,一个是夜间,那么就给夜间模式一个类名好了,单独给夜间模式设置一系列的样式,这样代码也显得少了。

但是! 居然给出了从未设想过的道路

不用js文件直接去操作样式,我只能说真的是学到了!

首先,我在学习前端时,遇到的点击事件,直接是去用js操作css的样式,基本上所有都是这么写的也从来没有听过可以这样写。先来看代码吧

<body>
  <input id="modeCheckBox" type="checkbox">
  <div class="content">
    <header>
      <label id="modeBtn" for="modeCheckBox"></label>
      <h1>深夜食堂</h1>
    </header>
    .....
    .....
    .....

不难看出,这里是用了一个checkbox,就是说他只有 true/false 再把这个复选框隐藏起来,用label标签展示按钮 🌞/🌜 当我们点击这个按钮时等于是点击了checkbox

接下来看最重要的css代码部分:

... ...

#modeCheckBox:checked + .content {
  background-color: black;
  color: white;
  transition: all 1s;
}

... ...

#modeCheckBox:checked + .content #modeBtn::after {
  content: '🌜';
}

首先,拿到input框的 选中 状态 并且通过 (+) 选择器(相当于左右类名都要符合条件)

翻译过来便是 : 若选中则执行下面的css的样式变换,所以下面的代码,就是夜间模式的样式。

接着完善代码,把按钮照此方法调整即可。

实在是给我这个新手,有了新的认知

总结:

原来 --- HTML/CSS/JS 各司其责 是这个意思,让我们避免不必要的由js操作css样式。