码迷,mamicode.com
首页 > 其他好文 > 详细

Vue 防抖函数封装和解析

时间:2021-05-24 05:51:40      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:按钮   函数   efs   function   pre   res   完成   fun   生成   

防抖函数:

  防止事件被多次触发

  使用:

    1. 页面加载图片,每张图片完成加载后会调用刷新功能,但如果不希望每次都执行刷新操作,可以使用防抖函数,实例1

    2. 一个按钮被触发,一段时间内两次或多次点击不再触发该事件,可以使用防抖函数

  主要逻辑:    

    1. 创建定时器,定时器中调用功能代码,定时器的定时时间

 

实例1:

  mounted() {
// 1. 将刷新操作包装到防抖函数debounce中 const refresh = this.debounce(this.$refs.scroll.refresh, 50) // 2. 如果事件总线$bus中的事件itemImageLoad被触发,则执行包装后的刷新操作 this.$bus.$on(‘itemImageLoad‘, () =>{ refresh() }) }, methods:{ /** * 事件监听相关 */ // 防抖函数(首页中,图片加载完成后要调用mounted中的刷新操作,为防止刷新太过频繁) // 所以,创建一个防止频繁刷新的防抖函数debounce(自定义名), // 解析:当一次刷新30张图出来时, // a. 第一张图加载完成后调用:refresh() // b. 会在debounce中创建一个timer变量,值为null // c. 返回一个函数function,这时timer为null,继续向下执行,定时器生成等待执行内部刷新代码(delay结束时) // d. 这时,如果时间delay还没到,第二张图被加载,也调用refresh(),这时,timer是第一个图的定时器timer对象; // 通过if判断后,将第一个图的定时器清除,不在执行内部刷新操作。 // (但如果第二张图加载的很慢,超过delay的时间,第一张图的定时器内部刷新代码就会被执行)     // e. 依次加载图片,调用refresh(),只要图片加载速度在定时器被调用前完成,就可以清除定时器,不执行刷新 debounce(func, delay){ let timer = null // 使用...args 可以传多个参数 return function (...args) {          // 1. 定义一个返回函数function if(timer) clearTimeout(timer) timer = setTimeout(() =>{ func.apply(this, args) },delay) } }, },

 

Vue 防抖函数封装和解析

标签:按钮   函数   efs   function   pre   res   完成   fun   生成   

原文地址:https://www.cnblogs.com/leafchen/p/14756776.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!