最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文教你如何一個(gè)Vue指令搞定函數(shù)防抖

 更新時(shí)間:2024年02月27日 10:26:32   作者:JYeontu  
防抖(Debounce)在前端開發(fā)中是一種常用的技術(shù),它的作用是限制某個(gè)操作在短時(shí)間內(nèi)的頻繁觸發(fā),下面我們就來看看如何一個(gè)Vue指令搞定函數(shù)防抖吧

說在前面

防抖(Debounce)在前端開發(fā)中是一種常用的技術(shù),它的作用是限制某個(gè)操作在短時(shí)間內(nèi)的頻繁觸發(fā),只有在一定的間隔時(shí)間內(nèi)才執(zhí)行相應(yīng)的操作。

什么是防抖

函數(shù)防抖 方法是一個(gè)函數(shù),它的執(zhí)行被延遲了 t 毫秒,如果在這個(gè)時(shí)間窗口內(nèi)再次調(diào)用它,它的執(zhí)行將被取消。你編寫的防抖函數(shù)也應(yīng)該接收傳遞的參數(shù)。

例如,假設(shè) t = 50ms ,函數(shù)分別在 30ms 、 60ms 和 100ms 時(shí)調(diào)用。前兩個(gè)函數(shù)調(diào)用將被取消,第三個(gè)函數(shù)調(diào)用將在 150ms 執(zhí)行。如果改為 t = 35ms ,則第一個(gè)調(diào)用將被取消,第二個(gè)調(diào)用將在 95ms 執(zhí)行,第三個(gè)調(diào)用將在 135ms 執(zhí)行。

效果展示

實(shí)現(xiàn)原理

防抖函數(shù)實(shí)現(xiàn)步驟

  • 1、當(dāng)需要執(zhí)行某個(gè)操作時(shí),首先設(shè)置一個(gè)定時(shí)器。
  • 2、如果在規(guī)定的時(shí)間間隔內(nèi)再次觸發(fā)了該操作,則清除之前的定時(shí)器。
  • 3、重新設(shè)置一個(gè)新的定時(shí)器,以確保在最后一次觸發(fā)操作后的一段時(shí)間內(nèi)不再觸發(fā)操作。
  • 4、最終在最后一次觸發(fā)操作后的時(shí)間間隔結(jié)束時(shí)執(zhí)行相應(yīng)的操作。

基本的防抖函數(shù)示例

function debounce(func, delay) {
  let timer;

  return function() {
    const context = this;
    const args = arguments;

    clearTimeout(timer);
    timer = setTimeout(() => {
      func.apply(context, args);
    }, delay);
  };
}

// 創(chuàng)建一個(gè)防抖函數(shù)
const debouncedFunction = debounce(() => {
  console.log('Debounced function is executed');
}, 300); // 設(shè)置延遲時(shí)間為300毫秒

// 在需要防抖的事件中調(diào)用防抖函數(shù)
window.addEventListener('scroll', debouncedFunction);

這種基礎(chǔ)的寫法應(yīng)該大部分同學(xué)都可以很輕松的寫出來,這里就不過多贅述了,主要看下怎么將其封裝成一個(gè)vue指令來使用。

封裝成vue指令

指令代碼

export default {
    inserted: function (el, binding) {
        const arg = binding.arg || 500;
        let timer;
        el.addEventListener("input", (e) => {
            clearTimeout(timer);
            timer = setTimeout(() => {
                binding.value(e);
            }, arg); // 設(shè)置延遲時(shí)間,單位為毫秒
        });
    },
};

這段代碼定義了一個(gè)自定義指令對(duì)象,其中的 inserted 方法會(huì)在指令綁定到元素上時(shí)被調(diào)用。在這里,我們將該指令綁定到輸入框上。

當(dāng)輸入框觸發(fā)輸入事件(input)時(shí),會(huì)執(zhí)行回調(diào)函數(shù)。在回調(diào)函數(shù)中,通過 clearTimeout 清除之前的定時(shí)器,并重新設(shè)置一個(gè)新的定時(shí)器。這樣做的目的是確保在用戶連續(xù)輸入時(shí)只有最后一次輸入的內(nèi)容被處理。

在新的定時(shí)器中,會(huì)等待一段時(shí)間(由 arg 參數(shù)指定,單位為毫秒),然后執(zhí)行 binding.value(e),也就是調(diào)用傳入指令的值的函數(shù)并傳遞事件對(duì)象 e。這樣就實(shí)現(xiàn)了在輸入框輸入時(shí)應(yīng)用防抖函數(shù)的效果。

指令使用

<input
    v-JDebounce:1000="handleInput"
    class="input-content"
/>

methods: {
    handleInput(event) {
        const value = event.target.value;
        if (value === "") {
            this.inputContent = "";
            return;
        }
        this.inputContent += `\n輸入了:${value}`;
    },
}
  • v-JDebounce:1000:這是一個(gè)自定義指令的綁定,JDebounce 是指令的名稱,1000 是指令參數(shù),表示延遲時(shí)間為1000毫秒。
  • handleInput:這是一個(gè)函數(shù)名,用于處理輸入框的輸入事件。

組件庫

組件文檔

目前該組件也已經(jīng)收錄到我的組件庫,組件文檔地址如下: jyeontu.xyz/jvuewheel/#/JDebounceView

組件內(nèi)容

組件庫中還有許多好玩有趣的組件,如:

  • 懸浮按鈕
  • 評(píng)論組件
  • 詞云
  • 瀑布流照片容器
  • 視頻動(dòng)態(tài)封面
  • 3D輪播圖
  • web桌寵
  • 貢獻(xiàn)度面板
  • 拖拽上傳
  • 自動(dòng)補(bǔ)全輸入框
  • 圖片滑塊驗(yàn)證

等等……

組件庫源碼

組件庫已開源到gitee,有興趣的也可以到這里看看:gitee.com/zheng_yongtao/jyeontu-component-warehouse

到此這篇關(guān)于一文教你如何一個(gè)Vue指令搞定函數(shù)防抖的文章就介紹到這了,更多相關(guān)Vue函數(shù)防抖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue axios調(diào)用接口方法報(bào)錯(cuò)500 internal server error的兩種解決方法

    vue axios調(diào)用接口方法報(bào)錯(cuò)500 internal server err

    前端使用axios 訪問后端接口時(shí)報(bào)錯(cuò),在瀏覽器中點(diǎn)擊紅色的報(bào)錯(cuò)數(shù)據(jù),本文給大家分享vue axios調(diào)用接口方法報(bào)錯(cuò)500 internal server error的兩種解決方法,感興趣的朋友一起看看吧
    2023-10-10
  • 如何持久化存儲(chǔ)你的Pinia狀態(tài)

    如何持久化存儲(chǔ)你的Pinia狀態(tài)

    createPersistedState是Pinia插件,用于持久化存儲(chǔ)狀態(tài)數(shù)據(jù),通過localStorage/sessionStorage實(shí)現(xiàn)頁面刷新后數(shù)據(jù)保留,適用于登錄信息、主題設(shè)置等場(chǎng)景,需在main.ts注冊(cè)并配置store開啟
    2025-07-07
  • 一文帶你了解Vue?和?React的區(qū)別

    一文帶你了解Vue?和?React的區(qū)別

    這篇文章主要介紹了Vue和React的區(qū)別,畢竟是兩個(gè)框架,不像兩個(gè)?API,要說細(xì)節(jié)上的區(qū)別就太多太多了,本文就簡(jiǎn)單的帶大家說說Vue?和?React?的區(qū)別,需要的朋友可以參考下
    2023-05-05
  • Vue3.0 手寫放大鏡效果

    Vue3.0 手寫放大鏡效果

    放大鏡在很多購(gòu)物網(wǎng)站都可以看的到,本文主要實(shí)現(xiàn) 固定放大兩倍,鼠標(biāo)進(jìn)入到左側(cè)圖片區(qū)域的時(shí)候,遮罩層顯示,離開時(shí),遮罩層隱藏,感興趣的可以了解一下
    2021-07-07
  • Vue3?實(shí)現(xiàn)驗(yàn)證碼倒計(jì)時(shí)功能(刷新保持狀態(tài))

    Vue3?實(shí)現(xiàn)驗(yàn)證碼倒計(jì)時(shí)功能(刷新保持狀態(tài))

    倒計(jì)時(shí)的運(yùn)用場(chǎng)景是需要經(jīng)常用到的,但是根據(jù)業(yè)務(wù)的不同,好比手機(jī)驗(yàn)證碼或者是郵箱驗(yàn)證碼之類的,即使用戶跳轉(zhuǎn)到其它頁面或者刷新,再次回到登錄也,驗(yàn)證碼的倒計(jì)時(shí)也得保持狀態(tài),下面通過本文給大家分享Vue3?驗(yàn)證碼倒計(jì)時(shí)功能實(shí)現(xiàn),感興趣的朋友一起看看吧
    2022-08-08
  • Vue如何處理Axios多次請(qǐng)求數(shù)據(jù)顯示問題

    Vue如何處理Axios多次請(qǐng)求數(shù)據(jù)顯示問題

    這篇文章主要介紹了Vue如何處理Axios多次請(qǐng)求數(shù)據(jù)顯示問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Vue js如何用split切分并去掉空值和item的空格

    Vue js如何用split切分并去掉空值和item的空格

    這篇文章主要介紹了Vue js如何用split切分并去掉空值和item的空格,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Vue中為什么要引入render函數(shù)的實(shí)現(xiàn)

    Vue中為什么要引入render函數(shù)的實(shí)現(xiàn)

    本文主要介紹了Vue中為什么要引入render函數(shù)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Vue實(shí)現(xiàn)簡(jiǎn)易計(jì)算器

    Vue實(shí)現(xiàn)簡(jiǎn)易計(jì)算器

    這篇文章主要為大家詳細(xì)介紹了用Vue制作的簡(jiǎn)易計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • 函數(shù)式組件劫持替代json封裝element表格

    函數(shù)式組件劫持替代json封裝element表格

    這篇文章主要介紹了為大家函數(shù)式組件劫持替代json封裝element表格的過程思路及示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07

最新評(píng)論

临西县| 永泰县| 仙桃市| 翁源县| 韩城市| 丘北县| 漳平市| 枞阳县| 东乡| 敦化市| 普洱| 尤溪县| 三门县| 志丹县| 通城县| 沈丘县| 湄潭县| 疏附县| 木里| 闽侯县| 普格县| 嘉义县| 大埔区| 勃利县| 吉林市| 偏关县| 鄂托克旗| 晴隆县| 富川| 马尔康县| 林芝县| 遵义县| 湖口县| 门源| 新乡县| 泌阳县| 裕民县| 田东县| 休宁县| 阆中市| 永和县|