节流:多次变少次 --执行的时间段
防抖:多次变一次,只执行最后那一次(秒杀)--停止以后多长时间执行
解决浏览器的卡顿现象,减少对服务器的压力
用于频繁改变的事情,轮播图、秒杀、点击事件、联想输入
按需引入lodash减少打包体积
引入的时候不要去引入整个lodash
引入lodash/throttle
100秒触发100次
正常:事件触发非常频繁,而且每一次的触发,回调函数都要去执行(如果时间很短,而回调函数内部有计算,那么很可能出现浏览器卡顿)
节流:在规定的间隔时间范围内不会重复触发回调,只有大于这个时间间隔才会触发回调,把频繁触发变为少量触发
防抖:前面的所有的触发都被取消,最后一次执行在规定的时间之后才会,也就是说如果连续快速的触发 只会执行一次

- <body>
-
- <button id="handle">测试不做函数节流/防抖button>
- <button id="throttle">测试函数节流button>
- <button id="debounce">测试函数防抖button>
-
-
-
- <script src="https://cdn.bootcss.com/lodash.js/4.17.15/lodash.js">script>
- <script>
- /* 处理点击事件的回调函数 */
- function handleClick(event) { // 处理事件的回调
- console.log('处理点击事件', this, event)
- }
-
- document.getElementById('handle').onclick = handleClick
- /*
- _.throttle(handleFn, delay, options)返回一个新函数, 就是绑定事件监听的回调函数(它是高频调用)
- handleFn: 真正处理事件的回调函数, 由throttle()返回的函数内部间隔指定的dalay时间后调用(少量调用)
- _.debounce()语法一样
- // */
- document.getElementById('throttle').onclick = _.throttle(handleClick, 2000)
- document.getElementById('debounce').onclick = _.debounce(handleClick, 2000)
- script>
-
- body>
浏览器打开就有的东西:document--初始包含块--html--body
初始包含块:给浏览器里的东西一个初始的高度
子绝父不相:相对于初始包含块
js数据类型
基本数据类型:ES5、ES6
引用数据类型:数组、函数、对象
内置对象:math,正则
包装对象:数字,字符串,布尔
响应拦截器按顺序执行
请求拦截器先执行最后的那一个
安装包引入文件css和js
在package.json找main 的指定文件,如果时js文件,就可以直接引入
找到css文件位置,在这个包下的文件引入对应的文件
axios的内部是用.then串联起来
请求拦截器里写失败的回调,return Promise.reject(error)
如果不写return会返回undefined,下一个.then会进入成功的回调
在vuex当中state初始化数据后,组件就会直接拿过来,不需要等待异步
点击某个类别(无论几级)跳转到搜索页面
先用声明式导航替换原来的a
需要把类别的id和类别的名字通过query参数传递
使用编程式路由导航优化声明式导航组件对象过多造成的卡顿
声明式导航本质上是组件对象,组件对象过多,会造成效率很慢 所以会很卡
利用事件委派提高处理事件的效率
每个分类项都添加事件,事件的回调函数很多,效率也不好
在共同的祖先级元素添加事件监听
利用自定义属性携带动态数据
标签的data-开头的属性,叫做自定义属性
通过我们的标签对象.dataset
1:事件绑给谁 最近的公共的唯一一个祖先元素
2:找到目标元素(点的是不是a)
3:参数如何传递
// 点击三级分类 事件委派处理跳转search界面 toSearch(event) { let dataset = event.target.dataset // 盲解 点的是什么元素 不关心,大不了我解构4个undefined // 一旦有a标签categoryname一定存在,三个id也一定有一个 let { category1id, category2id, category3id, categoryname } = dataset if (categoryname) { // 点的一定是a标签 let location = { name: 'search', } let query = { categoryName: categoryname } if (category1id) { query.category1Id = category1id } else if (category2id) { query.category2Id = category2id } else { query.category3Id = category3id } location.query = query // 点击三级分类,跳转搜索页的时候,需要把之前带过来的params参数给合并上 location.params = this.$route.params this.$router.push(location) } },
显示和隐藏一级列表的过渡效果添加
首先谁要加过渡就看谁在隐藏和显示
需要放在transition标签内部,name需要起名字
参考官方给的过渡图
移入移出的时候是有过渡的
注意:高度也是变化的
1、谁在显示和隐藏(条件渲染)就要加过度,加过度需要使用内置
组件去包含这个元素
2、给进入和离开的6个类名取前缀,在内置组件身上传递name属性
3、找到位置去书写6个类的样式,给谁加的内置组件样式就是作用给谁
