DRY原则:Don’t Repeat Yourself
相同的三行代码写了两遍就应该重构
MVC用来重构代码,减少重复

不学MVC会怎样?

  • 写spaghetti code 意大利面条式代码
  • 变成外包式程序员
    • 不停重复自己
    • 不会封装,不会造轮子
    • 不能提高自己

MVC是啥

每个模块可以写成三个对象,分别是M、V、C

  • M-Model (数据模型) 负责操作所有数据
  • V-View (视图) 负责所有UI界面
  • C-Controller (控制器) 负责其他

用JS引入CSS,jQuery

CSS

image.png

jQuery

在终端输入如下命令

  1. yarn init -y
  2. yarn add jquery

在js里引入jQuery

  1. import $ from 'jquery'

功能1:加减乘除

  1. const $add = $('#add')
  2. const $result = $('#result')
  3. const n = localStorage.getItem('n') // 读取localStorage
  4. $result.text(n || 100)
  5. $add.on('click',()=>{
  6. let n = parseInt($result.text()) // 获取text内容,转换为数值
  7. n += 1
  8. localStorage.setItem('n',n) // 存入localStorage
  9. $result.text(n) // 修改text内容
  10. })

滚动条的宽度在14-19之间

功能2:标签页切换

  1. <section id="app2">
  2. <ol>
  3. <li>1</li>
  4. <li>2</li>
  5. </ol>
  6. <ol>
  7. <li>内容1</li>
  8. <li>内容2</li>
  9. </ol>
  10. </section>

不要用.css,不要用.show/.hide等操作css的api
用.addClass和.removeClass
样式与行为分离,JS永远不要操作CSS

  1. import $ from 'jquery'
  2. const $tabBar = $('#app2 .tab-bar');
  3. const $tabContent = $('#app2 .tab-content')
  4. $tabBar.on('click', 'li', (e)=>{
  5. const $li = $(e.currentTarget)
  6. const index = $li.index()
  7. $tabBar.children()
  8. .eq(index).addClass('selected')
  9. .siblings().removeClass('selected')
  10. $tabContent.children()
  11. .eq(index).addClass('active')
  12. .siblings().removeClass('active')
  13. })
  14. $tabBar.children().eq(0).trigger('click') // 默认触发点击事件

功能3:左晃右晃

  1. #app3 > .square {
  2. margin-top: 5vw;
  3. margin-left: 5vw;
  4. width: 5vw;
  5. height: 5vw;
  6. border: 1px solid black;
  7. transition: transform 1s;
  8. }
  9. #app3 > .square.active {
  10. transform: translateX(15vw)
  11. }

toggleClass,如果class存在则添加,没有则删除

  1. import './app3.css'
  2. import $ from 'jquery'
  3. const $square = $('#app3 > .square')
  4. $square.on('click', ()=>{
  5. $square.toggleClass('active')
  6. })

功能4: 悬浮变色

alternate交替

  1. #app4 > .circle {
  2. border: 1px solid grey;
  3. width: 20vw;
  4. height: 20vw;
  5. border-radius: 50%;
  6. }
  7. @keyframes changeColor {
  8. 0%{background: red;}
  9. 100%{background: blue;}
  10. }
  11. #app4 > .circle.active {
  12. animation: changeColor 1s infinite linear alternate;
  13. }
  1. import './app4.css'
  2. import $ from 'jquery'
  3. const $circle = $('#app4 > .circle')
  4. $circle.on('mouseenter', ()=>{
  5. $circle.addClass('active')
  6. }).on('mouseleave', ()=>{
  7. $circle.removeClass('active')
  8. })