本篇文章為大家展示了如何在Vue2.x項目中使用防抖和節流功能,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
創新互聯是一家集網站建設,源城企業網站建設,源城品牌網站建設,網站定制,源城網站建設報價,網絡營銷,網絡優化,源城網站推廣為一體的創新建站企業,幫助傳統企業提升企業形象加強企業競爭力。可充分滿足這一群體相比中小企業更為豐富、高端、多元的互聯網需求。同時我們時刻保持專業、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們為更多的企業打造出實用型網站。Vue是一套用于構建用戶界面的漸進式JavaScript框架,Vue與其它大型框架的區別是,使用Vue可以自底向上逐層應用,其核心庫只關注視圖層,方便與第三方庫和項目整合,且使用Vue可以采用單文件組件和Vue生態系統支持的庫開發復雜的單頁應用。
// 防抖 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; //點擊第一次為true 時間內點擊第二次為false 時間結束則重復第一次 timeout = setTimeout(() => { timeout = null; }, wait); //定時器ID if (callNow) func.apply(context, args); } else { timeout = setTimeout(function() { func.apply(context, args); }, wait); } }; }; // 時間戳方案 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(); } }; }; // 定時器方案 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>防抖立即執行</p> <button @click="click1">點擊</button> <br /> <p>防抖不立即執行</p> <button @click="click2">點擊</button> <br /> <p>節流時間戳方案</p> <button @click="click3">點擊</button> <br /> <p>節流定時器方案</p> <button @click="click4">點擊</button> </div> </template> <script> import { debounce, throttleTime, throttleSetTimeout } from './utils'; export default { methods: { click1: debounce( function() { console.log('防抖立即執行'); }, 2000, true ), click2: debounce( function() { console.log('防抖不立即執行'); }, 2000, false ), click3: throttleTime(function() { console.log('節流時間戳方案'); }), click4: throttleSetTimeout(function() { console.log('節流定時器方案'); }) }, }; </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>
立即執行版本:immediate為true,則點擊第一次就執行,再繼續點擊則不執行,當wait時間結束后,再點擊則生效,也就是只執行第一次。
原理:
點擊第一次不存在timeoutID,并且callNow為true,則立即執行目標代碼,點擊第二次時存在了timeoutID,并且callNow為false,所以不執行目標代碼,當wait時間結束后,把timeoutID設為null,則開始重復立即執行邏輯。
不立即執行版:immediate為false,則點擊第一次不執行,當wait時間結束后,才生效,也就是無論點擊多少次,只執行最后一次點擊事件
原理:
使用setTimeout延遲執行事件,如果多次觸發,則clearTimeout上次執行的代碼,重新開始計時,在計時期間沒有觸發事件,則執行目標代碼。
連續觸發事件時以wait頻率執行目標代碼。
上述內容就是如何在Vue2.x項目中使用防抖和節流功能,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注創新互聯行業資訊頻道。
網站名稱:如何在Vue2.x項目中使用防抖和節流功能-創新互聯
轉載源于:http://m.newbst.com/article36/dcjopg.html
成都網站建設公司_創新互聯,為您提供網站收錄、品牌網站建設、軟件開發、服務器托管、云服務器、網頁設計公司
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯