vue函数防抖

防抖的概念  防抖又叫为函数防抖(debounce):指触发事件后,在 n 秒内函数只能执行一次,如果触发事件后在 n 秒内又触发了事件,则会重新计算函数延执行时间。  前端开发中,常见的事件如,onresize,scroll,mousemove ,mousehover 等会短时间内多次触发(频繁触发…

防抖的概念

  防抖又叫为函数防抖(debounce):指触发事件后,在 n 秒内函数只能执行一次,如果触发事件后在 n 秒内又触发了事件,则会重新计算函数延执行时间。

  前端开发中,常见的事件如,onresize,scroll,mousemove ,mousehover 等会短时间内多次触发(频繁触发),不做限制的话可能一秒执行几百次,在这些函数内部如果还执行了其他函数,尤其是执行了操作 DOM 的函数的话(浏览器操作 DOM 是很耗费性能的),那不仅会浪费计算机资源,还会降低程序运行速度,甚至造成浏览器卡死、崩溃。

  除此之外,短时间内重复调用 ajax 不仅会造成数据关系的混乱,还会造成网络拥堵,增加服务器压力等问题。

按钮防抖

import { debounce } from 'lodash';
<div
  v-for="(item, index) in summaryData"
  :key="index"
  @click="handleFun(item, index)"
        >
</div>
methods: {
    // 点击
    handleFun: debounce(function (item, index) {
        console.log(item,this)
    }, 300),
}

自定义指令防抖

 directive.js

import Vue from "vue";
import { debounce } from "lodash";

export default Vue.directive("debounceClick", {
  inserted: function (el, binding) {
    let delayTime = el.getAttribute("delay-time") || 500;
    el.onclick = debounce(function () {
      binding.value();
    }, delayTime);
  },
});

main.js引入

import "@/utils/directive";

页面使用

<template>
  <div id="app">
    <button v-debounceClick="debounce">防抖</button>
  </div>
</template>

<script>

export default {
  name: "App",
  components: {},
  methods: {
    debounce() {
      console.log(111);
    },
  },
};
</script>

<style></style>

js写的防抖函数,可以替换lodash中的防抖

import Vue from "vue";

const debounce = (fn, delay) => {
  let timer = null;
  return function () {
    const context = this;
    const args = arguments;
    clearTimeout(timer);
    timer = setTimeout(function () {
      fn.apply(context, args);
    }, delay);
  };
};

export default Vue.directive("debounceClick", {
  inserted: function (el, binding) {
    let delayTime = el.getAttribute("delay-time") || 500;
    el.onclick = debounce(function () {
      binding.value();
    }, delayTime);
  },
});

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值