vue中防抖和節(jié)流的使用方法
前言
在一個(gè)電影項(xiàng)目中,我想在電影的列表中,保存下拉的當(dāng)前位置,防止你切換頁面后,再切換回當(dāng)前的電影列表頁,他就又回到電影的第一條數(shù)據(jù)。
這時(shí)候,我不想每次只要滑動(dòng)一點(diǎn),就保存當(dāng)前位置,我想隔一段時(shí)間,保存一次,這時(shí)候,就可以使用防抖和節(jié)流。
概念
說白了, 防抖節(jié)流就是使用定時(shí)器 來實(shí)現(xiàn)我們的目的。
防抖(debounce):
在事件被觸發(fā)n秒后再執(zhí)行回調(diào),如果在這n秒內(nèi)又被觸發(fā),則重新計(jì)時(shí)。
典型的案例就是輸入框搜索:輸入結(jié)束后n秒才進(jìn)行搜索請(qǐng)求,n秒內(nèi)又輸入的內(nèi)容,則重新計(jì)時(shí)。
節(jié)流(throttle):
規(guī)定在一個(gè)單位時(shí)間內(nèi),只能觸發(fā)一次函數(shù),如果這個(gè)單位時(shí)間內(nèi)觸發(fā)多次函數(shù),只有一次生效。
典型的案例就是鼠標(biāo)不斷點(diǎn)擊觸發(fā),規(guī)定在n秒內(nèi)多次點(diǎn)擊只生效一次。
防抖
定義
頻繁操作防止抖動(dòng),在操作后 n 秒內(nèi)不操作,才觸發(fā)事件,若繼續(xù)操作,則重新計(jì)時(shí)
使用場(chǎng)景
- 輸入框輸入
- 縮放resize
代碼
// utils.js
// immediate 是否開始立即執(zhí)行
function debounce(func, delay = 300, immediate = false) {
let timer = null
return function() {
if (timer) {
clearTimeout(timer)
}
if (immediate && !timer) {
func.apply(this, arguments)
}
timer = setTimeout(() => {
func.apply(this, arguments)
}, delay)
}
}
在vue中使用
方法一:寫在公共方法utils里引入
import { debounce } from 'utils'
methods: {
appSearch:debounce(function(e.target.value){
this.handleSearch(value)
}, 1000),
handleSearch(value) {
console.log(value)
}
}
方法二:寫在當(dāng)前vue文件中
data: () => {
return {
debounceInput: () => {}
}
},
methods: {
showApp(value) {
console.log('value', value)
},
debounce(func, delay = 300, immediate = false) {
let timer = null
return function() {
if (timer) {
clearTimeout(timer)
}
if (immediate && !timer) {
func.apply(this, arguments)
}
timer = setTimeout(() => {
func.apply(this, arguments)
}, delay)
}
}
},
mounted() {
this.debounceInput = this.debounce(this.showApp, 1000)
},
節(jié)流
定義
頻繁操作稀釋函數(shù)執(zhí)行,頻繁操作時(shí),每隔n秒才觸發(fā)一次
使用場(chǎng)景
- 鼠標(biāo)點(diǎn)擊,mousedown,mousemove單位時(shí)間只執(zhí)行一次
- 滾動(dòng)事件,懶加載、滾動(dòng)加載、加載更多或監(jiān)聽滾動(dòng)條位置
- 防止高頻點(diǎn)擊提交,防止表單重復(fù)提交
代碼
// utils.js
function throttle (func, delay = 300) {
let prev = 0
return function() {
let now = Date.now()
if ((now - prev) >= delay) {
func.apply(this, arguments)
prev = Date.now()
}
}
}
在vue中使用
使用方法與防抖相同
總結(jié)
到此這篇關(guān)于vue中防抖和節(jié)流使用的文章就介紹到這了,更多相關(guān)vue防抖和節(jié)流使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vsCode安裝配置創(chuàng)建Vue3項(xiàng)目全過程
本文介紹了如何在Windows系統(tǒng)上安裝和配置Vue.js開發(fā)環(huán)境,包括安裝VS Code、Node.js、Vue CLI以及創(chuàng)建和啟動(dòng)一個(gè)Vue項(xiàng)目2025-01-01
Vue實(shí)現(xiàn)多個(gè)關(guān)鍵詞高亮顯示功能
在現(xiàn)代網(wǎng)頁開發(fā)中,常常需要實(shí)現(xiàn)高亮顯示關(guān)鍵詞的功能,這篇文章將探討如何通過?Vue.js?中的?highlightText來實(shí)現(xiàn)這一功能,感興趣的可以了解下2024-12-12
Vue和relation-graph庫打造高質(zhì)量的關(guān)系圖應(yīng)用程序
這篇文章主要介紹了Vue和relation-graph庫打造高質(zhì)量的關(guān)系圖應(yīng)用程序,在這篇文章中,我們深入探討了如何使用Vue和relation-graph高效打造關(guān)系圖,我們?cè)敿?xì)介紹了數(shù)據(jù)準(zhǔn)備、關(guān)系映射、點(diǎn)擊事件等關(guān)鍵步驟,需要的朋友可以參考下2023-09-09
Vue2.0/3.0雙向數(shù)據(jù)綁定的實(shí)現(xiàn)原理詳解
這篇文章主要給大家介紹了關(guān)于Vue2.0/3.0雙向數(shù)據(jù)綁定的實(shí)現(xiàn)原理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
安裝vue無法運(yùn)行、此系統(tǒng)無法運(yùn)行腳本問題及解決
這篇文章主要介紹了安裝vue無法運(yùn)行、此系統(tǒng)無法運(yùn)行腳本問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03

