在Vue.js中,有一個非常實用的debounce函數(shù)。當(dāng)我們需要處理頻繁的事件觸發(fā)時,使用debounce可以避免重復(fù)操作,提高性能。
debounce函數(shù)主要的作用是:當(dāng)函數(shù)連續(xù)觸發(fā)時,只執(zhí)行最后一次操作。通過設(shè)置一個等待時間,在等待時間內(nèi)如果函數(shù)再次觸發(fā),就重新開始計時,直到等待時間結(jié)束執(zhí)行最后一次操作。
function debounce(func, wait) { let timeout; return function() { const context = this; const args = arguments; clearTimeout(timeout); timeout = setTimeout(() =>{ func.apply(context, args); }, wait); }; }
使用debounce函數(shù)也非常簡單:
import { debounce } from 'lodash'; export default { data() { return { inputValue: '', }; }, methods: { handleChange: debounce(function() { // do something }, 500), }, };
在上例中,設(shè)置了一個等待時間500毫秒,當(dāng)input框的值變化時觸發(fā)handleChange函數(shù)。在500毫秒內(nèi)多次變化值,只執(zhí)行最后一次操作,避免了不必要的操作。
使用debounce還可以設(shè)置立即執(zhí)行一次操作:
function debounce(func, wait, immediate = true) { let timeout; return function() { const context = this; const args = arguments; if (timeout) clearTimeout(timeout); if (immediate) { const callNow = !timeout; timeout = setTimeout(() =>{ timeout = null; }, wait); if (callNow) func.apply(context, args); } else { timeout = setTimeout(() =>{ func.apply(context, args); }, wait); } }; }
在例子中,增加了第三個參數(shù)immediate,設(shè)置為true時,立即執(zhí)行一次操作。
以上就是使用Vue.js中的debounce函數(shù)的方式和原理,希望對大家有所幫助。