国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【前端】防抖和節(jié)流原理+實(shí)現(xiàn)

這篇具有很好參考價值的文章主要介紹了【前端】防抖和節(jié)流原理+實(shí)現(xiàn)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

防抖和節(jié)流原理+實(shí)現(xiàn)

防抖(Debounce)和節(jié)流(Throttle)都是用于控制函數(shù)執(zhí)行頻率的機(jī)制,它們在處理高頻觸發(fā)的事件時非常有用。

1、防抖(Debounce)

防抖的原理是在事件被觸發(fā)后,等待一段時間(例如200毫秒)來執(zhí)行函數(shù),如果在等待時間內(nèi)事件被再次觸發(fā),則重新計時。這樣可以避免在短時間內(nèi)多次觸發(fā)事件導(dǎo)致函數(shù)頻繁執(zhí)行的問題,常用于輸入框搜索、窗口調(diào)整等場景。

   function debounce(func, delay) {
     let timer;
     
     return function() {
       clearTimeout(timer);
       timer = setTimeout(() => {
         func.apply(this, arguments);
       }, delay);
     }
   }
   
   // 使用 debounce 包裝需要防抖的函數(shù)
   const debouncedFunc = debounce(function() {
     console.log('防抖函數(shù)執(zhí)行');
   }, 200);
   
   // 在事件處理中使用 debouncedFunc
   element.addEventListener('input', debouncedFunc);

Vue3自定義ref實(shí)現(xiàn)防抖

customRef 是 Vue 3 中的一個函數(shù),用于創(chuàng)建一個自定義的響應(yīng)式引用(Custom Ref)。它可以用來定義具有自定義行為的響應(yīng)式數(shù)據(jù),比如在數(shù)據(jù)發(fā)生變化時觸發(fā)特定的副作用。

使用 customRef 函數(shù)需要傳入一個 factory 函數(shù),該函數(shù)會返回一個對象,該對象必須包含以下兩個屬性:

  1. get:一個無參數(shù)的函數(shù),用于獲取引用的當(dāng)前值。
  2. set:一個帶有一個參數(shù)的函數(shù),用于設(shè)置引用的值。

通過 customRef 創(chuàng)建一個自定義的響應(yīng)式引用。它內(nèi)部維護(hù)了一個變量 value 存儲當(dāng)前值,并且在 getset 方法中分別調(diào)用了 tracktrigger 函數(shù),以便在引用的值發(fā)生變化時通知依賴追蹤和觸發(fā)更新。

/src/hooks/debounceRef.js
import { customRef } from 'vue';

export function debounceRef(value, duration = 1000) {
    let timer = null;
    return customRef((track, trigger) => {
        return {
            get() {
                // 收集依賴
                track();
                return value;
            },
            set(newValue) {
                clearTimeout(timer);
                timer = setTimeout(() => {
                    value = newValue;
                    // 派發(fā)更新
                    trigger();
                }, duration);
            }
        }
    })
}
/src/App.vue
<template>
    <div class="container">
        <input type="text" v-model="text">
        <p>{{ text }}</p>
    </div>
</template>

<script setup>
import { debounceRef } from './hooks/debounceRef'
const text = debounceRef('', 500)
</script>

<style lang="less" scoped>
.container {
    width: 80%;
    margin: 0 auto;
}
</style>

2、節(jié)流(Throttle)

節(jié)流的原理是規(guī)定一個時間間隔(例如200毫秒),在該時間間隔內(nèi)只能觸發(fā)一次函數(shù)執(zhí)行。如果在該時間間隔內(nèi)多次觸發(fā)事件,只有第一次觸發(fā)會執(zhí)行函數(shù),后續(xù)的觸發(fā)會被忽略。節(jié)流常用于滾動事件、按鈕點(diǎn)擊等場景。

   function throttle(func, interval) {
     let lastTime = 0;
     
     return function() {
       let now = Date.now();
       if (now - lastTime >= interval) {
         func.apply(this, arguments);
         lastTime = now;
       }
     }
   }
   
   // 使用 throttle 包裝需要節(jié)流的函數(shù)
   const throttledFunc = throttle(function() {
     console.log('節(jié)流函數(shù)執(zhí)行');
   }, 200);
   
   // 在事件處理中使用 throttledFunc
   element.addEventListener('scroll', throttledFunc);

3、使用場景:

  • 輸入框?qū)崟r搜索:在用戶輸入內(nèi)容時,通過防抖來減少請求的頻率,在用戶停止輸入一段時間后再發(fā)送請求。
  • 窗口調(diào)整事件:當(dāng)窗口大小調(diào)整時,使用節(jié)流來控制回調(diào)函數(shù)的執(zhí)行頻率,避免過度頻繁地執(zhí)行。
  • 頁面滾動事件:在監(jiān)聽頁面滾動時,使用節(jié)流來減少函數(shù)的觸發(fā)頻率,提高性能。
  • 鼠標(biāo)移動事件:當(dāng)鼠標(biāo)在元素上移動時,使用節(jié)流來限制觸發(fā)函數(shù)的次數(shù),避免過于頻繁的回調(diào)。

總體來說,防抖和節(jié)流都是優(yōu)化高頻觸發(fā)事件的機(jī)制,可以提升性能和用戶體驗。根據(jù)具體需求選擇合適的方式來應(yīng)用。文章來源地址http://www.zghlxwxcb.cn/news/detail-853240.html

到了這里,關(guān)于【前端】防抖和節(jié)流原理+實(shí)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 防抖和節(jié)流有什么區(qū)別?

    防抖和節(jié)流有什么區(qū)別?

    一、理解防抖和節(jié)流 防抖: 在單位時間內(nèi)頻繁觸發(fā)事件,只有最后一次生效 比如:在游戲回城的時候被打斷,再次點(diǎn)回城就會重新計時,最終只有沒被打斷的最后一次,才能成功回城,就是防抖 節(jié)流: 在單位時間內(nèi)頻繁觸發(fā)事件,只生效一次(也就是只有第一次生效) 比

    2024年02月04日
    瀏覽(18)
  • 小程序如何使用防抖和節(jié)流?

    防抖(Debounce)和節(jié)流(Throttle)都是用來優(yōu)化函數(shù)執(zhí)行頻率的技術(shù),特別在處理用戶輸入、滾動等頻繁觸發(fā)的情況下,它們可以有效減少函數(shù)的執(zhí)行次數(shù),從而提升性能和用戶體驗。但它們的工作方式和應(yīng)用場景有所不同。 防抖的主要思想是,當(dāng)持續(xù)觸發(fā)事件時,在事件最

    2024年02月13日
    瀏覽(21)
  • axios、跨域與JSONP、防抖和節(jié)流

    axios、跨域與JSONP、防抖和節(jié)流

    Axios 是專注于 網(wǎng)絡(luò)數(shù)據(jù)請求 的庫。 相比于原生的 XMLHttpRequest 對象,axios 簡單易用 。 相比于 jQuery,axios 更加 輕量化 ,只專注于網(wǎng)絡(luò)數(shù)據(jù)請求。 axios.get(\\\'url\\\', { params: { /*參數(shù)*/ } }).then(callback) 例如: axios.post(\\\'url\\\', { /*參數(shù)*/ }).then(callback) 例如: 例如: 如果兩個頁面的 協(xié)議

    2024年02月08日
    瀏覽(20)
  • 防抖和節(jié)流 含義及區(qū)別圖文詳解秒懂

    防抖和節(jié)流 含義及區(qū)別圖文詳解秒懂

    防抖和節(jié)流都是為解決短時間內(nèi)頻繁觸發(fā)某個功能函數(shù)而導(dǎo)致的性能問題。比如,觸發(fā)頻率過高而導(dǎo)致響應(yīng)速度跟不上,以致出現(xiàn)延遲,假死或卡頓的現(xiàn)象。? 圖解:一件事情,計劃5s以后觸發(fā),結(jié)果中途意外觸發(fā)了,那么就重新從0開始5秒的計時,這就導(dǎo)致本身計劃的事情就

    2024年02月06日
    瀏覽(19)
  • 【js】防抖和節(jié)流的使用場景和區(qū)別:

    【js】防抖和節(jié)流的使用場景和區(qū)別:

    一、防抖 (多次觸發(fā) 只執(zhí)行最后一次) 作用: 高頻率觸發(fā)的事件,在指定的單位時間內(nèi),只響應(yīng)最后一次,如果在指定的時間內(nèi)再次觸發(fā),則重新計算時間 防抖類似于英雄聯(lián)盟回城6秒,如果回城中被打斷,再次回城需要再等6秒 二、節(jié)流 (規(guī)定時間內(nèi) 只觸發(fā)一次) 作用:

    2024年02月10日
    瀏覽(22)
  • 了解同源策略 JSONP 案例-淘寶搜索 防抖和節(jié)流

    什么是跨域 同源指的是兩個 URL 的協(xié)議、域名、端口一致,反之,則是跨域。 出現(xiàn)跨域的根本原因:瀏覽器的同源策略不允許非同源的 URL 之間進(jìn)行資源的交互。 網(wǎng)頁:http://www.test.com/index.html 接口:http://www.api.com/userlist 瀏覽器對跨域請求的攔截 注意:瀏覽器允許發(fā)起跨域請

    2024年02月05日
    瀏覽(30)
  • JS手寫防抖和節(jié)流函數(shù)(超詳細(xì)版整理)

    JS手寫防抖和節(jié)流函數(shù)(超詳細(xì)版整理)

    防抖(debounce) :每次觸發(fā)定時器后,取消上一個定時器,然后重新觸發(fā)定時器。防抖 一般用于用戶未知行為的優(yōu)化 ,比如搜索框輸入彈窗提示,因為用戶接下來要輸入的內(nèi)容都是未知的,所以每次用戶輸入就彈窗是沒有意義的,需要等到用戶輸入完畢后再進(jìn)行彈窗提示。

    2024年02月04日
    瀏覽(20)
  • 1 vue防抖和限流

    1 vue防抖和限流

    防抖(Debouncing)是一種前端開發(fā)中常用的技術(shù),用于限制函數(shù)的執(zhí)行頻率。在防抖的機(jī)制下,一個函數(shù)在一定時間內(nèi)只會執(zhí)行一次,即使它被頻繁地調(diào)用。 具體來說,防抖的實(shí)現(xiàn)方式是設(shè)置一個定時器,在每次函數(shù)被調(diào)用時,先清除之前的定時器,然后重新設(shè)置一個新的定

    2024年01月19日
    瀏覽(13)
  • 前端刷題-防抖節(jié)流

    在實(shí)際的開發(fā)過程中,一般會使用lodash自有的debounce函數(shù)和throttle函數(shù)對所要防抖/節(jié)流的函數(shù)進(jìn)行包裹。例如

    2024年02月10日
    瀏覽(18)
  • 前端優(yōu)化 ----防抖 節(jié)流

    如果一個事件在短時間內(nèi)連續(xù)觸發(fā),則只去執(zhí)行最后一次。 控制頻率 實(shí)現(xiàn)方式:每次觸發(fā)事件時設(shè)置一個延遲調(diào)用方法,并且取消之前的延時調(diào)用方法 缺點(diǎn):如果事件在規(guī)定的時間間隔內(nèi)被不斷的觸發(fā),則調(diào)用方法會被不斷的延遲 使一個函數(shù)在固定時間內(nèi)只執(zhí)行一次??刂?/p>

    2024年02月04日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包