函數防抖和節流

一、什么是函數節流

函數節流:是確保函數特定的時間內至多執行一次。

1.函數節流的原理

函數節流的原理挺簡單的,當第一次觸發函數執行時,創建一個定時器,延遲這個事件,如果在當前時間內再次觸發,就清除原來的定時器,重新創建一個定時器,延遲執行。

2.應用場景

搜索聯想/mousemove/keydown/高頻率的點擊

3.代碼實現

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>函數節流</title>
</head>

<body>
    <script>
        //函數節流
        const throttle = (fun, delay) => {
            let last = null;
            return () => {
                //獲取毫秒數
                const now = +new Date();
                if (now - last > delay * 1000) {
                    fun();
                    last = now;
                }
            }
        }
        //實例函數
        const throttleDemo = throttle(() => console.log('throttleDemo'), 1);
        //函數調用
        throttleDemo();

    </script>
</body>

</html>

二、什么是函數防抖

函數防抖:是函數在特定的時間內不被再調用后執行。

1.函數防抖的原理

如果函數多次觸發,則把上次記錄的定時器清掉,重新開始。如果計時完畢,沒有方法進來訪問觸發,則執行代碼。

2.應用場景

多用在onresize跟onscroll,這兩個事件一個在頁面放大縮小時觸發一個在頁面滾動時觸發,都是連續不斷的觸發的

3.代碼實現

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>函數防抖</title>
</head>

<body>
    <script>
        //函數防抖
        const debouce = (fun, delay) => {
            let timer = null;
            return () => {
                clearTimeout(timer);
                timer = setTimeout(() => {
                    fun();
                }, delay * 1000);
            };
        };
        //實例函數
        const debouceDemo = debouce(() => console.log('debouceDemo'), 1);
        //函數調用
        debouceDemo();
    </script>
</body>

</html>
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 函數節流 還記得上篇文章中說到的圖片懶加載嗎?我們在文章的最后實現了一個頁面滾動時按需加載圖片的方式,即在觸發滾動...
    柏丘君閱讀 2,870評論 1 19
  • 前端菜鳥一只,查閱了一些資料,大概明白了什么是函數節流 是什么? 就是讓一個函數無法在很短的時間間隔內連續執行,只...
    莊海鑫閱讀 1,768評論 2 3
  • 黃昏 飛鳥在預感中 抖落肩上的金黃 把陰影投在石上 驚醒一扇扇孤獨的窗 把最后一次眺望 還給檐下的少年 讓他擁抱槽...
    一位手藝人閱讀 1,846評論 6 13
  • 小姨媽是日企小白領,平日上班跟著同事學會了怎樣畫日式裸妝。 大家知道在這個不僅要靠實力還要靠顏值的時代,化個小裸妝...
    楠楠細時語閱讀 948評論 7 9
  • noi2017-Day2-T1 【問題描述】 狂野飆車是小L最喜歡的游戲。與其他業余玩家不同的是,小L在玩游戲之余...
    島田半藏閱讀 297評論 0 0