在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美

當前位置:雨林木風下載站 > 網頁設計教程 > 詳細頁面

JavaScript防抖與節流的應用以及完成方法介紹(代碼示例)

JavaScript防抖與節流的應用以及完成方法介紹(代碼示例)

更新時間:2025-12-07 文章作者:未知 信息來源:網絡 閱讀次數:

網頁的本質就是超級文本標記語言,通過結合使用其他的Web技術(如:腳本語言、公共網關接口、組件等),可以創造出功能強大的網頁。因而,超級文本標記語言是萬維網(Web)編程的基礎,也就是說萬維網是建立...
網頁的本質就是超級文本標記語言,通過結合使用其他的Web技術(如:腳本語言、公共網關接口、組件等),可以創造出功能強大的網頁。因而,超級文本標記語言是萬維網(Web)編程的基礎,也就是說萬維網是建立在超文本基礎之上的。超級文本標記語言之所以稱為超文本標記語言,是因為文本中包含了所謂“超級鏈接”點。
本篇文章給大家帶來的內容是關于JavaScript防抖和節流的應用以及實現方法介紹(代碼示例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

首先舉一個例子:

模擬在輸入框輸入后做ajax查詢請求,沒有加入防抖和節流的效果,這里附上完整可執行代碼:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>沒有防抖</title>
    <style type="text/css"></style>
    <script type="text/javascript">
        window.onload = function () {
            //模擬ajax請求
            function ajax(content) {
                console.log('ajax request ' + content)
            }
            let inputNormal = document.getElementById('normal');

            inputNormal.addEventListener('keyup', function (e) {
                ajax(e.target.value)
            })
        }
    </script>
</head>

<body>
    <div>
        1.沒有防抖的輸入:
        <input type="text" name="normal" id="normal">
    </div>
</body>
</html>

效果:在輸入框里輸入一個,就會觸發一次“ajax請求”(此處是console)。

3414406445-5c073f3667321_articlex.png

沒有防抖和節流

缺點:浪費請求資源,可以加入防抖和節流來優化一下。

本文會分別介紹什么是防抖和節流,它們的應用場景,和實現方式。防抖和節流都是為了解決短時間內大量觸發某函數而導致的性能問題,比如觸發頻率過高導致的響應速度跟不上觸發頻率,出現延遲,假死或卡頓的現象。但二者應對的業務需求不一樣,所以實現的原理也不一樣,下面具體來看看吧。

1. 防抖(debounce)

1.1 什么是防抖

在事件被觸發n秒后再執行回調函數,如果在這n秒內又被觸發,則重新計時。

1.2 應用場景

(1) 用戶在輸入框中連續輸入一串字符后,只會在輸入完后去執行最后一次的查詢ajax請求,這樣可以有效減少請求次數,節約請求資源;

(2) window的resize、scroll事件,不斷地調整瀏覽器的窗口大小、或者滾動時會觸發對應事件,防抖讓其只觸發一次;

1.3 實現

還是上述列子,這里加入防抖來優化一下,完整代碼如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>加入防抖</title>
    <style type="text/css"></style>
    <script type="text/javascript">
        window.onload = function () {
            //模擬ajax請求
            function ajax(content) {
                console.log('ajax request ' + content)
            }
            function debounce(fun, delay) {
                return function (args) {
                    //獲取函數的作用域和變量
                    let that = this
                    let _args = args
                    //每次事件被觸發,都會清除當前的timeer,然后重寫設置超時調用
                    clearTimeout(fun.id)
                    fun.id = setTimeout(function () {
                        fun.call(that, _args)
                    }, delay)
                }
            }
            let inputDebounce = document.getElementById('debounce')
            let debounceAjax = debounce(ajax, 500)
            inputDebounce.addEventListener('keyup', function (e) {
                debounceAjax(e.target.value)
            })
        }
    </script>
</head>

<body>
    <div>
        2.加入防抖后的輸入:
        <input type="text" name="debounce" id="debounce">
    </div>
</body>
</html>

代碼說明:

1.每一次事件被觸發,都會清除當前的 timer 然后重新設置超時調用,即重新計時。 這就會導致每一次高頻事件都會取消前一次的超時調用,導致事件處理程序不能被觸發;

2.只有當高頻事件停止,最后一次事件觸發的超時調用才能在delay時間后執行;

效果:

加入防抖后,當持續在輸入框里輸入時,并不會發送請求,只有當在指定時間間隔內沒有再輸入時,才會發送請求。如果先停止輸入,但是在指定間隔內又輸入,會重新觸發計時。

3492306317-5c073f36648f5_articlex.png

加入防抖

2.節流(throttle)

2.1 什么是節流

規定一個單位時間,在這個單位時間內,只能有一次觸發事件的回調函數執行,如果在同一個單位時間內某事件被觸發多次,只有一次能生效。

2.2 應用場景

(1)鼠標連續不斷地觸發某事件(如點擊),只在單位時間內只觸發一次;

(2)在頁面的無限加載場景下,需要用戶在滾動頁面時,每隔一段時間發一次 ajax 請求,而不是在用戶停下滾動頁面操作時才去請求數據;

(3)監聽滾動事件,比如是否滑到底部自動加載更多,用throttle來判斷;

2.3 實現

還是上述列子,這里加入節流來優化一下,完整代碼如下:

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>加入節流</title>
    <style type="text/css"></style>
    <script type="text/javascript">
        window.onload = function () {
            //模擬ajax請求
            function ajax(content) {
                console.log('ajax request ' + content)
            }

            function throttle(fun, delay) {
                let last, deferTimer
                return function (args) {
                    let that = this;
                    let _args = arguments;

                    let now = +new Date();
                    if (last && now < last + delay) {
                        clearTimeout(deferTimer);
                        deferTimer = setTimeout(function () {
                            last = now;
                            fun.apply(that, _args);
                        }, delay)
                    } else {
                        last = now;
                        fun.apply(that, _args);
                    }
                }
            }
            let throttleAjax = throttle(ajax, 1000)
            let inputThrottle = document.getElementById('throttle')
            inputThrottle.addEventListener('keyup', function (e) {
                throttleAjax(e.target.value)
            })
        }
    </script>
</head>
<body>
    <div>
        3.加入節流后的輸入:
        <input type="text" name="throttle" id="throttle">
    </div>
</body>
</html>

效果:實驗可發現在持續輸入時,會安裝代碼中的設定,每1秒執行一次ajax請求

3486468392-5c073f3639d1a_articlex.png

加入節流

3. 小結

總結下防抖和節流的區別:

-- 效果:

函數防抖是某一段時間內只執行一次;而函數節流是間隔時間執行,不管事件觸發有多頻繁,都會保證在規定時間內一定會執行一次真正的事件處理函數。

-- 原理:

防抖是維護一個計時器,規定在delay時間后觸發函數,但是在delay時間內再次觸發的話,都會清除當前的 timer 然后重新設置超時調用,即重新計時。這樣一來,只有最后一次操作能被觸發。

節流是通過判斷是否到達一定時間來觸發函數,若沒到規定時間則使用計時器延后,而下一次事件則會重新設定計時器。

以上就是JavaScript防抖和節流的應用以及實現方法介紹(代碼示例)的詳細內容,更多請關注php中文網其它相關文章!


網站建設是一個廣義的術語,涵蓋了許多不同的技能和學科中所使用的生產和維護的網站。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美
  • <li id="86scu"><menu id="86scu"></menu></li>
    <li id="86scu"></li>
    <button id="86scu"></button>
  • <s id="86scu"></s><button id="86scu"><menu id="86scu"></menu></button>
  • 国产91xxx| 手机成人av在线| 狠狠干视频网站| 91pony九色| 色婷婷一区二区三区av免费看| 精品视频一区二区在线| 国产美女主播在线| 黄色一级视频在线播放| 亚洲美免无码中文字幕在线| 国产免费黄色一级片| 国产免费一区二区视频| 日韩精品视频在线观看视频| 福利视频一区二区三区四区| 精品丰满人妻无套内射| 男女啪啪免费视频网站| 国产精品丝袜久久久久久消防器材| 国产xxxx振车| 337p粉嫩大胆噜噜噜鲁| 黄色一级免费大片| 免费成年人高清视频| 香蕉视频色在线观看| 一本大道东京热无码aⅴ| 国产成人一区二区三区别| 日韩国产欧美亚洲| 冲田杏梨av在线| 国产精品igao网网址不卡| www国产无套内射com| 国产毛片视频网站| 中文字幕成人在线视频| 天天爱天天做天天操| 亚洲熟妇国产熟妇肥婆| 亚洲国产精品三区| 日韩亚洲欧美一区二区| 999精品网站| 男人c女人视频| 看欧美ab黄色大片视频免费| 裸体大乳女做爰69| 又粗又黑又大的吊av| 污污网站在线观看视频| 九一国产精品视频| 欧美国产日韩另类| 国产精品欧美激情在线观看| 中文字幕第三区| 日韩精品无码一区二区三区免费| 精产国品一二三区| 999精品视频在线| 日本中文字幕亚洲| 亚洲av毛片在线观看| 欧美a在线视频| 特大黑人娇小亚洲女mp4| 黄色手机在线视频| www.xxx麻豆| 最新视频 - x88av| 五月婷婷六月合| 超碰影院在线观看| 熟女少妇在线视频播放| 黄色一级大片免费| 亚洲精品在线网址| 性生生活大片免费看视频| 日本精品免费在线观看| 日韩成人手机在线| 欧美精品久久96人妻无码| 亚洲怡红院在线| 精品999在线| 天天操天天爱天天爽| 无码人妻丰满熟妇区毛片| 国产91美女视频| 欧美 日本 亚洲| 日本欧美黄色片| 国产91xxx| 无码专区aaaaaa免费视频| 中文字幕日韩精品无码内射| 深夜做爰性大片蜜桃| 日日夜夜精品视频免费观看| 992tv人人草| 激情五月五月婷婷| 美女扒开大腿让男人桶| 成人免费在线网| 欧美s码亚洲码精品m码| 国产极品美女高潮无套久久久| 毛片一区二区三区四区| 久久久久国产一区| 在线播放免费视频| 国产欧美123| 国产毛片视频网站| 国产一区视频免费观看| 黄色片视频在线| 中国黄色录像片| 无码中文字幕色专区| 日本在线视频www| 少妇网站在线观看| 免费观看亚洲视频| 99久久国产宗和精品1上映| 高清一区在线观看| 久久福利一区二区| 欧美丰满熟妇xxxxx| 欧美日韩亚洲国产成人| 日本日本19xxxⅹhd乱影响| 超碰在线公开97| 天堂а√在线中文在线| 国产精品69页| japanese在线播放| 国产理论在线播放| 日韩欧美猛交xxxxx无码| 欧美自拍小视频| 免费看日本黄色| 在线免费视频a| 日本香蕉视频在线观看| 青青草久久伊人| 男女啪啪免费视频网站| 中文 日韩 欧美| 精品久久久久久中文字幕2017| 在线观看成人免费| 香蕉视频999| 免费日韩中文字幕| 久久成人福利视频| 善良的小姨在线| 亚洲综合欧美在线| 久草在在线视频| 日本福利视频一区| 国产成人三级视频| 手机免费看av网站| 亚洲五月天综合| 国产淫片av片久久久久久| 欧美黑人在线观看| 四虎免费在线观看视频| 色啦啦av综合| 久久久久国产一区| 日韩欧美xxxx| 999精品网站| 精品久久久久久久免费人妻| 久久精品无码中文字幕| 欧美交换配乱吟粗大25p| 艳母动漫在线免费观看| 手机在线免费毛片| 亚洲18在线看污www麻豆| 中文久久久久久| 国产wwwxx| 亚洲精品自拍网| 一二三级黄色片| 久久久国产精华液999999 | 日本美女视频一区| 美女一区二区三区视频| 午夜肉伦伦影院| 国内自拍视频一区| 岛国毛片在线播放| 日本网站在线看| 日韩中文字幕在线不卡| 久久人人爽人人爽人人av| 青青草国产精品视频| 久久国产乱子伦免费精品| 国产又粗又长又大的视频| 免费看涩涩视频| 青青视频免费在线| www.玖玖玖| 亚洲妇熟xx妇色黄蜜桃| 一区二区三区四区免费观看| 国产资源在线免费观看| 成人在线免费在线观看| 色播五月综合网| 奇米777四色影视在线看| 九一国产精品视频| 亚洲老女人av| 97碰在线视频| 婷婷丁香激情网| 国产一级不卡视频| 国产综合免费视频| 九九久久九九久久| 欧美成人黑人猛交| 久久福利一区二区| 国产精品拍拍拍| 日韩av中文字幕第一页| 亚洲天堂av线| 久久黄色片视频| 欧美日韩一级在线| av五月天在线| 日韩精品 欧美| 国产黑丝在线视频| 成人午夜视频免费在线观看| 91国在线高清视频| 中文字幕日韩综合| 色诱视频在线观看| 131美女爱做视频| 国产三级中文字幕| 99日在线视频| 亚洲国产精品毛片av不卡在线| bt天堂新版中文在线地址| 日韩一区二区三区久久| 国产亚洲精品网站| 欧美日韩福利在线| 懂色av一区二区三区四区五区| 成年网站在线播放| 欧美精品成人网| 男人操女人逼免费视频| 免费看黄在线看| 亚洲黄色网址在线观看| 一级做a爱视频| 天美一区二区三区| 天天摸天天舔天天操| 亚洲这里只有精品|