国产精品美女久久久浪潮AV,国产精品三级一二三区,久久精品国产一区二区小说 ,依依成人影视国产精品,全部无卡免费的毛片在线看,日本一区二区三深夜不卡,国产精品女同一区二区久久,国产精品夜色一区二区三区

        JavaScript防抖與節流,深入淺出,一本正經講透徹

        2021-9-29    前端達人

        目錄

        一、函數防抖(debounce)

        1. 什么是防抖?

        二.、函數節流

        2.1 定時器實現

        2.2 時間戳實現

        2.3 時間戳+定時器

        最后 


        一、函數防抖(debounce)

        1. 什么是防抖?

        函數防抖在頻繁觸發某一個事件時,一段時間內不再觸發該事件后才會去調用對應的回調函數,在設定間隔時間內如果下一次事件被觸發, 那么就重新開始定時器,直到事件觸發結束。

        規定時間內沒有繼續觸發事件的前提下,再去調用事件處理函數;

        具體如下面的例子所示:

        
        
        1. /*定義防抖函數
        2. * func:傳入一個函數,事件不再持續觸發時會調用該函數
        3. * delay:定義持續多久后執行傳入的回調函數
        4. * */
        5. function debounce(func,delay) {
        6. let timer = null // 用于保存定時器
        7. return function (...args) {
        8. // 如果定時器存在,清除定時器,隨后重新設置timer
        9. if(timer !== null) clearTimeout(timer)
        10. timer = setTimeout(func, delay) // 超過delay為接收到事件會調用這里的func 必要的額時候可以修改func的this指向 由于timer對外部存在引用,因此不會被銷毀
        11. }
        12. }
        13. /*事件處理函數*/
        14. function testDeBounce(){
        15. console.log('你看我執行了幾次??')
        16. }
        17. // 接收debounce返回的函數
        18. const temp = debounce(testDeBounce(),1000)
        19. /*綁定事件,測試防抖函數*/
        20. window.addEventListener('scroll',()=>{
        21. temp()
        22. }); // 這樣寫最少調用一次事件處理函數,最多也不會多余下面的寫法執行的次數
        23. window.addEventListener('scroll', testDeBounce); // 如果這樣寫的話,每當頁面滾動就會調用事件處理函數
        • 總結一下思路

          1.定義一個節流函數

          2.函數內部使用一個變量保存定時器

          3.返回一個函數,函數內部定義:如果定時器已經存在就清除定時器,重新設置定時器

          4.定義一個變量來接收debounce返回的函數

          5.在事件的回調函數中直接調用上一步的變量接收的方法


        二.、函數節流

        函數節流在事件持續觸發的前提下,保證一定時間段內只調用一次事件處理函數,就是函數節流;

        函數節流實現的方式定時器、時間戳、定時器+時間戳;

        2.1 定時器實現

        思路

        1.定義節流函數throttle

        2.定義timer保存定時器

        3.返回一個函數。函數內部定義:如果定時器不存在,設置定時器,間隔某一時間后將timer設置為null,如果在這之前事件再次觸發,則定時器中的回調無效

        <button>這是一個孤獨的按鈕</button> 
        
        
        1. /*
        2. * 定義定時器節流函數
        3. * func:傳入事件處理函數
        4. * delay:在delay指定的時間內定時器回調無效
        5. * */
        6. function throttle(func,delay) {
        7. let timer = null
        8. const context = this
        9. return function(...args){
        10. // 如果定時器不存在
        11. if(!timer){
        12. timer = setTimeout(()=>{
        13. func.apply(context,args) // 考慮返回的函數調用的環境,因此這里不直接使用this
        14. timer = null // delay之后清除定時器
        15. },delay)
        16. }
        17. }
        18. }
        19. function test() {
        20. console.log('啊啊啊!')
        21. }
        22. const temp = throttle(test,1000)
        23. document.querySelector('button').addEventListener('click',()=>{
        24. temp()
        25. })

        2.2 時間戳實現

        
        
        1. var throttle = function(func, delay) {
        2. var prev = Date.now();
        3. return function() {
        4. var context = this;
        5. var args = arguments;
        6. var now = Date.now();
        7. if (now - prev >= delay) {
        8. func.apply(context, args);
        9. prev = Date.now();
        10. }
        11. }
        12. }
        13. function handle() {
        14. console.log(Math.random());
        15. }
        16. window.addEventListener('scroll', throttle(handle, 1000));

        2.3 時間戳+定時器

        
        
        1. // 節流throttle代碼(時間戳+定時器):
        2. var throttle = function(func, delay) {
        3. var timer = null;
        4. var startTime = Date.now();
        5. return function() {
        6. var curTime = Date.now();
        7. var remaining = delay - (curTime - startTime);
        8. var context = this;
        9. var args = arguments;
        10. clearTimeout(timer);
        11. if (remaining <= 0) {
        12. func.apply(context, args);
        13. startTime = Date.now();
        14. } else {
        15. timer = setTimeout(func, remaining);
        16. }
        17. }
        18. }
        19. function handle() {
        20. console.log(Math.random());
        21. }
        22. window.addEventListener('scroll', throttle(handle, 1000));

        最后 

        想跟博主交朋友的可以查找,公_號?:前端老實人,跟博主一起探討學習哦?


        藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請掃碼藍小助,報下信息,藍小助會請您入群。歡迎您加入噢~~希望得到建議咨詢、商務合作,也請與我們聯系。

        分享此文一切功德,皆悉回向給文章原作者及眾讀者.

        轉自:csdn
        免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。

        藍藍設計m.shtzxx.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 平面設計服務

        日歷

        鏈接

        個人資料

        藍藍設計的小編 http://m.shtzxx.cn

        存檔

        主站蜘蛛池模板: 玛纳斯县| 美女视频黄频a美女大全| 久久精品国产成人| 香港三级日本三级韩国三级| 国产av亚洲精品ai换脸电影| 啊灬啊灬啊灬快灬喷水了| 欧美伊人久久大香线蕉综合| 思思久久99热只有频精品66 | 免费人成网视频在线观看| 精品国偷自产在线视频| aⅴ久久欧美丝袜综合| 泸溪县| 国产极品美女到高潮| 国产精品国产三级国产aⅴ下载| 83午夜电影免费| 精品久久久久久久久久久aⅴ| 99久久精品日本一区二区免费| brazzers欧美丰满| 平泉县| 丰满熟妇videosxxxxx| 亚洲国产欧美在线人成最新| 99国产精品无码| 春闺梦里人在线观看完整版 | 国产在线永久视频| 中文字幕无码av激情不卡| 国产成人美女视频网站| 无码视频一区二区三区在线观看| 99riav国产精品视频| 人妻少妇精品中文字幕av蜜桃| 少妇被粗大的猛烈进出免费视频| 第一福利官方导航| 欧美不卡视频一区发布| 99久久久无码国产精品免费 | 国产高清欧美激情| 少妇下蹲露大唇无遮挡| 讷河市| 在线看片免费人成视频大全| 日韩精品一区二区亚洲av | 性色欲情网站iwww| 亚洲成在人线在线播放| 玩弄放荡人妇系列av在线网站|