0
点赞
收藏
分享

微信扫一扫

尚硅谷第五天

三分梦_0bc3 2022-02-15 阅读 68

7:函数的防抖与节流
        7.1 卡顿现象

        原因:事件的触发非常频繁,每一次的触发都会引起回调函数的执行,如果回调函数内部有计算,且频繁触发,那么就会导致浏览器卡顿。

        7.2 防抖

        介绍:指频繁触发事件,但是只会执行最后一次的事件回调,之前的回调都会被取消。

        技术:lodash中debounce方法封装了防抖的实现

        7.3 节流

        介绍:指频繁触发事件,但是事件回调在一定的时间内只会执行一次,把频繁触发变为少量触发。

        技术:lodash中的throttle方法封装了节流的实现

        7.4 三级联动的添加一级分类背景色的节流操作

import throttle from 'lodash/throttle'
 
//注意使用普通函数,箭头函数有this问题
changeIndex: throttle(function(index){
    this.currentIndex = index
},50)
8:三级联动路由的跳转与传参
        8.1 跳转

        1.声明式路由导航:不能较好的完成路由跳转

        存在问题:卡顿问题

        原因:router-link标签它是一个组件,当循环遍历三级联动分类时,会在一瞬间创建很多router-link标签,当数据发生变化时,还涉及到模板解析、虚拟DOM、真实DOM等很多步骤,消耗内存很大,导致页面卡顿。

        2.编程式路由导航:能够较好的完成跳转,但是不够优秀

        存在问题:每一个a标签都绑定了对应的点击事件,会使点击事件很多。

        3.编程式路由导航 + 事件委派:能够很好的完成路由跳转

        原因:将所有的点击跳转事件都委派给统一的父节点来完成,只有一个回调。

        8.2 传参(要求传递名字与对应id)

        1.编程式路由导航 + 事件委派涉及的问题与解决方法

        问题1:因为父节点中包含了较多的子节点(h3、dt、dl、a等),怎么区分点击的是a节点?

        解决方法:给a标签添加自定义属性 :data-categoryName="c1.categoryName",通过鼠标事件 event.target.dataset 去拿到对应的自定义属性并且判断是否是a标签(注意浏览器会把驼峰式自定义属性名改为非驼峰式 categoryName ==> categoryname)

        问题2:怎么传递对应的id

        解决方法:给三级a标签分别添加自定义属性 :data-category1Id、:data-category2Id、:data-category3Id进行区分

        

// 三级联动路由跳转
    goSearch(event) {
      // 解构出自定义属性
      const { categoryname, category1id, category2id, category3id } = event.target.dataset;
      // 整理参数
      const location = { name: "search" };
      const query = { categoryName: categoryname };
      // 判断是否是 a标签
      if (categoryname) {
        if (category1id) {
          query.category1Id = category1id;
        } else if (category2id) {
          query.category2Id = category2id;
        } else {
          query.category3Id = category3id;
        }
      }
      // 整理参数
      location.query = query
      this.$router.push(location);

举报

相关推荐

python第五天

第五天解答

第五天笔记

JS 第五天

RHCSA(第五天)

0 条评论