DRY原则:Don’t Repeat Yourself
相同的三行代码写了两遍就应该重构
MVC用来重构代码,减少重复
不学MVC会怎样?
- 写spaghetti code 意大利面条式代码
- 变成外包式程序员
- 不停重复自己
- 不会封装,不会造轮子
- 不能提高自己
MVC是啥
每个模块可以写成三个对象,分别是M、V、C
- M-Model (数据模型) 负责操作所有数据
- V-View (视图) 负责所有UI界面
- C-Controller (控制器) 负责其他
用JS引入CSS,jQuery
CSS
jQuery
在终端输入如下命令
yarn init -yyarn add jquery
在js里引入jQuery
import $ from 'jquery'
功能1:加减乘除
const $add = $('#add')const $result = $('#result')const n = localStorage.getItem('n') // 读取localStorage$result.text(n || 100)$add.on('click',()=>{let n = parseInt($result.text()) // 获取text内容,转换为数值n += 1localStorage.setItem('n',n) // 存入localStorage$result.text(n) // 修改text内容})
滚动条的宽度在14-19之间
功能2:标签页切换
<section id="app2"><ol><li>1</li><li>2</li></ol><ol><li>内容1</li><li>内容2</li></ol></section>
不要用.css,不要用.show/.hide等操作css的api
用.addClass和.removeClass
样式与行为分离,JS永远不要操作CSS
import $ from 'jquery'const $tabBar = $('#app2 .tab-bar');const $tabContent = $('#app2 .tab-content')$tabBar.on('click', 'li', (e)=>{const $li = $(e.currentTarget)const index = $li.index()$tabBar.children().eq(index).addClass('selected').siblings().removeClass('selected')$tabContent.children().eq(index).addClass('active').siblings().removeClass('active')})$tabBar.children().eq(0).trigger('click') // 默认触发点击事件
功能3:左晃右晃
#app3 > .square {margin-top: 5vw;margin-left: 5vw;width: 5vw;height: 5vw;border: 1px solid black;transition: transform 1s;}#app3 > .square.active {transform: translateX(15vw)}
toggleClass,如果class存在则添加,没有则删除
import './app3.css'import $ from 'jquery'const $square = $('#app3 > .square')$square.on('click', ()=>{$square.toggleClass('active')})
功能4: 悬浮变色
alternate交替
#app4 > .circle {border: 1px solid grey;width: 20vw;height: 20vw;border-radius: 50%;}@keyframes changeColor {0%{background: red;}100%{background: blue;}}#app4 > .circle.active {animation: changeColor 1s infinite linear alternate;}
import './app4.css'import $ from 'jquery'const $circle = $('#app4 > .circle')$circle.on('mouseenter', ()=>{$circle.addClass('active')}).on('mouseleave', ()=>{$circle.removeClass('active')})
