本篇文章為大家展示了如何在Vue2.x項(xiàng)目中使用防抖和節(jié)流功能,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),源城企業(yè)網(wǎng)站建設(shè),源城品牌網(wǎng)站建設(shè),網(wǎng)站定制,源城網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,源城網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。Vue是一套用于構(gòu)建用戶界面的漸進(jìn)式JavaScript框架,Vue與其它大型框架的區(qū)別是,使用Vue可以自底向上逐層應(yīng)用,其核心庫只關(guān)注視圖層,方便與第三方庫和項(xiàng)目整合,且使用Vue可以采用單文件組件和Vue生態(tài)系統(tǒng)支持的庫開發(fā)復(fù)雜的單頁應(yīng)用。
// 防抖 export const debounce = (func, wait = 3000, immediate = true) => { let timeout = null; return function() { let context = this; let args = arguments; if (timeout) clearTimeout(timeout); if (immediate) { var callNow = !timeout; //點(diǎn)擊第一次為true 時(shí)間內(nèi)點(diǎn)擊第二次為false 時(shí)間結(jié)束則重復(fù)第一次 timeout = setTimeout(() => { timeout = null; }, wait); //定時(shí)器ID if (callNow) func.apply(context, args); } else { timeout = setTimeout(function() { func.apply(context, args); }, wait); } }; }; // 時(shí)間戳方案 export const throttleTime = (fn, wait = 2000) => { var pre = Date.now(); return function() { var context = this; var args = arguments; var now = Date.now(); if (now - pre >= wait) { fn.apply(context, args); pre = Date.now(); } }; }; // 定時(shí)器方案 export const throttleSetTimeout = (fn, wait = 3000) => { var timer = null; return function() { var context = this; var args = arguments; if (!timer) { timer = setTimeout(function() { fn.apply(context, args); timer = null; }, wait); } }; };
<template> <div class="main"> <p>防抖立即執(zhí)行</p> <button @click="click1">點(diǎn)擊</button> <br /> <p>防抖不立即執(zhí)行</p> <button @click="click2">點(diǎn)擊</button> <br /> <p>節(jié)流時(shí)間戳方案</p> <button @click="click3">點(diǎn)擊</button> <br /> <p>節(jié)流定時(shí)器方案</p> <button @click="click4">點(diǎn)擊</button> </div> </template> <script> import { debounce, throttleTime, throttleSetTimeout } from './utils'; export default { methods: { click1: debounce( function() { console.log('防抖立即執(zhí)行'); }, 2000, true ), click2: debounce( function() { console.log('防抖不立即執(zhí)行'); }, 2000, false ), click3: throttleTime(function() { console.log('節(jié)流時(shí)間戳方案'); }), click4: throttleSetTimeout(function() { console.log('節(jié)流定時(shí)器方案'); }) }, }; </script> <style scoped lang="scss"> * { margin: 0; font-size: 20px; user-select: none; } .main { position: absolute; left: 50%; transform: translateX(-50%); width: 500px; } button { margin-bottom: 100px; } </style>
立即執(zhí)行版本:immediate為true,則點(diǎn)擊第一次就執(zhí)行,再繼續(xù)點(diǎn)擊則不執(zhí)行,當(dāng)wait時(shí)間結(jié)束后,再點(diǎn)擊則生效,也就是只執(zhí)行第一次。
原理:
點(diǎn)擊第一次不存在timeoutID,并且callNow為true,則立即執(zhí)行目標(biāo)代碼,點(diǎn)擊第二次時(shí)存在了timeoutID,并且callNow為false,所以不執(zhí)行目標(biāo)代碼,當(dāng)wait時(shí)間結(jié)束后,把timeoutID設(shè)為null,則開始重復(fù)立即執(zhí)行邏輯。
不立即執(zhí)行版:immediate為false,則點(diǎn)擊第一次不執(zhí)行,當(dāng)wait時(shí)間結(jié)束后,才生效,也就是無論點(diǎn)擊多少次,只執(zhí)行最后一次點(diǎn)擊事件
原理:
使用setTimeout延遲執(zhí)行事件,如果多次觸發(fā),則clearTimeout上次執(zhí)行的代碼,重新開始計(jì)時(shí),在計(jì)時(shí)期間沒有觸發(fā)事件,則執(zhí)行目標(biāo)代碼。
連續(xù)觸發(fā)事件時(shí)以wait頻率執(zhí)行目標(biāo)代碼。
上述內(nèi)容就是如何在Vue2.x項(xiàng)目中使用防抖和節(jié)流功能,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
網(wǎng)站名稱:如何在Vue2.x項(xiàng)目中使用防抖和節(jié)流功能-創(chuàng)新互聯(lián)
轉(zhuǎn)載源于:http://redsoil1982.com.cn/article36/dcjopg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、品牌網(wǎng)站建設(shè)、軟件開發(fā)、服務(wù)器托管、云服務(wù)器、網(wǎng)頁設(shè)計(jì)公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容