前端尚品汇(四)———函数防抖及节流
创始人
2024-11-20 09:05:59
0

前端尚品汇(四)———函数防抖及节流

  • 一、相关概念
    • 正常
    • 节流
    • 防抖
  • 二、相关小案例
    • 防抖小案例
      • 1.首先新建项目,先将lodah的js放入项目的包下
      • 2.打开lodash官方文档,查找防抖
      • 3.新建一个html
    • 4.写一个获取输入事件,每次获取都打印kk
  • 节流小案例
  • 三、三级联动组件的路由跳转与传递参数

一、相关概念

正常

事件触发非常频繁,而且每一次的触发,回调函数都要去执行(如果时间很短,而回调函数内部有计算,那么很可能出现浏览器卡顿)

节流

在规定的间隔时间范围内不会重复触发回调,只有大于这个时间间隔才会触发回调,把频繁触发变为少量触发。
其实前面写鼠标移出函数已经用过了——传送门

防抖

前面的所有的触发都被取消,最后一次执行在规定的时间之后才会触发,也就是说如果连续快速的触发只会执行一次

二、相关小案例

防抖小案例

根据前面的解,我们知道,所谓的防抖,就是当用户连续快速的触发某一事件时,只会在规定时间内触发一次
我们在这可以用lodash里的方法来实现,这里在需要在html文件中的script引用,资源已经上传在文章顶部啦
在需要使用其他方法或想通过npm安装时,也可以参照官方文档
biu~这是传送门lodash
好了介绍完资源接着我们来看看防抖具体怎么操作

1.首先新建项目,先将lodah的js放入项目的包下

在这里插入图片描述

2.打开lodash官方文档,查找防抖

这是官方解释

_.debounce(func, [wait=0], [options=])
创建一个 debounced(防抖动)函数,该函数会从上一次被调用后,延迟 wait 毫秒后调用 func 方法。 debounced(防抖动)函数提供一个 cancel 方法取消延迟的函数调用以及 flush 方法立即调用。 可以提供一个 options(选项) 对象决定如何调用 func 方法,options.leading 与|或 options.trailing 决定延迟前后如何触发(注:是 先调用后等待 还是 先等待后调用)。 func 调用时会传入最后一次提供给 debounced(防抖动)函数 的参数。 后续调用的 debounced(防抖动)函数返回是最后一次 func 调用的结果。

3.新建一个html

具体html部分代码如下

 

please input your search:

//并引入js

运行后页面如下
在这里插入图片描述

4.写一个获取输入事件,每次获取都打印kk

let input=document.querySelector('input');          input.oninput=function(){          console.log('hh');      } 

让我们来猜猜,运行后在控制台会出现什么现象呢?
当你每次有输入操作时,hh也在不断的打印。
在这里插入图片描述如何解决这个问题呢?
这时就可以用我们的防抖函数,具体代码如下

 // 使用lodash防抖函数     input.oninput=_.debounce(function(){         console.log('hh')     },1000) 

接着我们再到页面看看效果
我一次性输入了这么多个r才输出一次hh
在这里插入图片描述

节流小案例

所谓节流呢,就是用户操作很频繁,但是把频繁的操作变为少量操作【可以给浏览器有充裕的时间解析代码】
也一样通过一个小案例来说明
上代码

     

我是计算器0

在这里插入图片描述疯狂点击加1,控制台疯狂打印执行第xx次
接着我们用节流函数来修改,代码如下

let span=document.querySelector('span');     let button=document.querySelector('button');     let count=0;       button.onclick=_.throttle(function(){         count++;         span.innerHTML=count;         console.log("执行第"+count+"次")     },1000); 

修改后,你再疯狂的点击,控制台不会疯狂的输出,它会按着它的节奏来

三、三级联动组件的路由跳转与传递参数

三级联动用户可以点击的:一级分类、二级分类、三级分类,当你点击的时候
Home模块跳转到Search模块,一级会把用户选中的产品(产品的名字、产品的ID)在路由跳转的时候,进行传递。
路由跳转:
声明式导航:router-link
编程式导航:push|replace
三级联动:如果使用声明式导航router-link,可以实现路由的跳转与传递参数,但可能会卡顿
解决代码如下,有用到自定义标签

                     
//最好的解决方案:编程式导航+事件委派     goSearch(e) {       // 存在一些问题:事件委派,是把全部的子节点【h3、dt、d1、em】的事件委派给父亲节点点击a标签的时候,才会进行路由跳转【怎么能确定点击的一定是a标签】I       //存在另外一个问题:即使你能确定点击的是a标签,如何区分是一级、二级、三级分类的标签。       //第一个问题:把子节点当中a标签,我加上自定义属性data-categoryName,其余的子节点是没有的       let element = e.target;       //节点有一个属性dataset属性,可以获取节点的自定义属性与属性值 解构赋值       let { categoryname, categoryid1, categoryid2, categoryid3 } =         element.dataset;       //如果标签身上拥有categoryname一定是a标签       if (categoryname) {         //一级分类、二级分类、三级分类的a标签         // 整理路由参数         let location = { name: "soso" };         let query = { categoryName: categoryname };         if (categoryid1) {           // 整理id1           query.categoryId1 = categoryid1;         } else if (categoryid2) {           // 整理id2           query.categoryId2 = categoryid2;         } else {           // 整理id3           query.categoryId3 = categoryid3;         }         //判断:如果路由跳转的时候,带有params参数,捎带脚传递过去         if (this.$route.params) {           location.params = this.$route.params;           // 合并路径和参数           location.query = query;           // 路由调转           this.$router.push(location);         }       }     }, 

补充一点事件委派
原理:DOM的事件冒泡
使用“事件委托”时,不是说把事件委托给的元素越靠近顶层就越好。事件冒泡的过程也需要耗时,越靠近顶层,事件的”事件传播链”越长,也就越耗时。如果DOM嵌套结构很深,事件冒泡通过大量祖先元素会导致性能损失。

相关内容

热门资讯

为什么出现验证码 验证码的出现主要是为了防止机器人或者恶意软件进行自动操作,保护用户的账号安全,确保是真实的人在进行操...
web密码是什么密码 Web密码通常是指用于登录网站账户的密码,它由字母、数字和特殊字符组成,用于保护用户的个人信息和隐私...
外网加固是什么意思啊 外网加固是指在建筑施工中,对外墙进行加固处理,以提高建筑物的抗震、抗风等性能。外网加固是指通过一系列...
qq漏洞大全 QQ漏洞大全可能包含各种历史和当前的QQ安全漏洞信息,但出于安全考虑,不宜公开讨论或传播。请关注官方...
主页签名是什么意思啊 主页签名通常是指在个人或组织的官方网站首页上展示的一段文字,用于传达个人或组织的形象、理念、价值观等...
玩家攻略推荐!青龙大厅辅助器技... 1、让任何用户在无需AI插件第三方神器的情况下就能够完成在微扑克下的调试。2、直接的在微扑克上面进行...
钢筋kf是什么钢 KF是抗拉强度1000Mpa的抗震钢筋,也称为三级钢,或叫三级螺纹钢、螺纹钢。KF钢筋概述KF是钢筋...
分享认知!快玩炸翻天辅助功能(... 分享认知!快玩炸翻天辅助功能(辅助挂)wpk辅助神器,细致教程(有挂指示),快玩炸翻天是用手机号来登...
今日公布!边锋斗地主记牌工具推... 今日公布!边锋斗地主记牌工具推荐(辅助器)wpk用辅助器,精确教程(有挂手段);亲真的是有正版授权,...
第三方推荐!福建众娱软件有辅助... 大家肯定在之前WePoKer或者WPK中玩过第三方推荐!福建众娱软件有辅助(辅助挂)微扑克系统是有问...