Vue2项目使用lodash插件 节流 和 防抖

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

可以采用debounce(防抖)和throttle(节流)的方式来减少事件调用频率,同时又不影响实际效果。 使用lodash插件,该插件提供了防抖和节流的函数,同时也可以自己写防抖和节流的函数(使用闭包 + 定时器)。

实际问题:当鼠标经过左侧的连接时,打印当前 a 标签索引值,鼠标快速从上滑到下面,正常情况下,应该从 0打印到 15,实际上只打印了其中一部分,这就是由于短时间内频繁触发了 mouseenter事件,浏览器反应不过来。如果当前调用的回调函数中,有大量的数据、DOM节点等操作,会造成页面卡顿。

 使用lodash插件的节流函数,解决该问题,触发mouseenter事件的完整函数如下:

 methods: {
    // 一级分类 鼠标进入修改响应数据 currentIndex 属性
    // changeIndex(index) {
    //   // index 鼠标移上某一个一级分类的元素的索引值
    //   // 正常情况(用户慢慢的操作):每一个一级分类h3都会触发鼠标进入事件
    //   // 非正常情况(用户的操作很快):本身全部的一级分类都应该触发鼠标进入事件,但是经过测试 只有部分h3触发
    //   // 就是由于用户的行为过快,导致浏览器反应不过来,如果当前回调函数中 有大量业务,有可能出现卡顿现象
    //   this.currentIndex = index;
    //   console.log(index);
    // },
    // throttle 的回调函数,不要用箭头函数,可能出现上下文 this 问题
    changeIndex: throttle(function (index) {
      this.currentIndex = index;
    }, 50),

    // 一级分类 鼠标移除的时间回调
    leaveIndex() {
      // 鼠标移除,
      this.currentIndex = -1;
    },
  },

注意:

  • methods中一定不要使用简写形式
  • 节流(规定的事件范围内只执行一次):在规定的间隔时间范围内不会重复触发回调,只有大于这个时间间隔才会触发回调,吧频繁触发变为少量触发 ,'_.throttle(function(){}, time)'
  • 防抖(只执行最后一次):前面的所有的触发都被取消,最后一次执行在规定的时间之后才会触发,也就是说如果连续快速触发 只会执行一次 ,'_.debounce(function(){}, time)'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue使用lodash来实现节流防抖的方法如下: 1. 安装lodash库:在项目根目录下打开命令行工具,执行以下命令安装lodash库: ``` npm install lodash ``` 2. 导入lodash库:在需要使用节流防抖的组件中,导入lodash库的相关函数: ```javascript import { debounce, throttle } from 'lodash'; ``` 3. 使用节流函数使用`throttle`函数来实现节流。`throttle`函数会在指定的时间间隔内只执行一次函数,可以用于限制频繁触发的事件,例如滚动、拖拽等。以下是一个使用节流函数的示例: ```javascript export default { data() { return { scrollHandler: null }; }, methods: { handleScroll() { // 处理滚动事件的逻辑 console.log('Scroll event'); } }, mounted() { this.scrollHandler = throttle(this.handleScroll, 200); // 设置节流时间为200ms window.addEventListener('scroll', this.scrollHandler); }, beforeDestroy() { window.removeEventListener('scroll', this.scrollHandler); } } ``` 在上述代码中,使用`throttle`函数将`handleScroll`方法包装起来,设置节流时间为200ms。在组件的`mounted`生命周期钩子中,将节流后的处理函数添加到`scroll`事件监听器中,保证在指定时间间隔内只执行一次。 4. 使用防抖函数使用`debounce`函数来实现防抖。`debounce`函数会在指定的时间间隔后执行函数,如果在这个时间间隔内又触发了同样的函数,则重新计时。以下是一个使用防抖函数的示例: ```javascript export default { data() { return { inputHandler: null, inputValue: '' }; }, methods: { handleInput() { // 处理输入事件的逻辑 console.log('Input event'); } }, mounted() { this.inputHandler = debounce(this.handleInput, 500); // 设置防抖时间为500ms } } ``` 在上述代码中,使用`debounce`函数将`handleInput`方法包装起来,设置防抖时间为500ms。在组件的`mounted`生命周期钩子中,将防抖后的处理函数赋值给`inputHandler`。 在模板中,将防抖处理函数绑定到相应的事件上: ```html <input type="text" v-model="inputValue" @input="inputHandler"> ``` 这样,在输入框输入内容时,只有在500ms内没有再次输入才会触发防抖后的处理函数

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值