防抖(debounce):触发高频事件后 n 秒内函数只会执行一次,如果 n 秒内高频事件再次被触发,则重新计算时间。
使用场景:频繁触发、输入框搜索等。
具体方法如下:
export const debounce = (fn, t) => { let delay = t || 500; let timer; return function() { let args = arguments; if (timer) { clearTimeout(timer); } timer = setTimeout(() => { timer = null; fn.apply(this, args); }, delay); }; };
二、节流
节流(thorttle):高频事件触发,但在 n 秒内只会执行一次,所以节流会稀释函数的执行频率。
使用场景:使用场景:频繁触发、onrize,onscroll滚动条,抢购按钮高频点击。
export const Throttle = (fn, t) => { let last; let timer; let interval = t || 500; return function() { let args = arguments; let now = + new Date(); if (last && now - last < interval) { clearTimeout(timer); timer = setTimeout(() => { last = now; fn.apply(this, args); }, interval); } else { last = now; fn.apply(this, args); } }; };
<template> <div> <div>防抖</div> <input type='text' @keydown="hangleChange"> <div>{{value}}</div> <div>节流</div> <input type='text' @keydown="hangleChange1"> <div>{{value1}}</div> </div> </template> <script> import { debounce,Throttle } from '@/plugins/debounceThorttle.js' export default { name: 'test', data() { return { value: '', value1: '' } }, methods: { hangleChange: debounce(function(e){ this.value = e.target.value }), hangleChange1: Throttle(function(e) { this.value1 = e.target.value }) } } </script> <style> </style>