国产精品爱久久久久久久小说,女人扒开腿让男人桶到爽 ,亚洲欧美国产双大乳头,国产成人精品综合久久久久,国产精品制服丝袜无码,免费无码精品黄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
            免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。

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

            日歷

            鏈接

            個人資料

            藍藍設計的小編 http://www.dzxscac.cn

            存檔

            主站蜘蛛池模板: 亚洲亚洲人成网站网址| 天堂中文在线资源| 午夜看片| 日本一二区视频| 大片视频免费观看视频| 欧美成在线观看| 人妻少妇精品中文字幕av蜜桃| av东京热无码专区| 成人av网站在线| 亚洲精品国产suv| 亚洲成av人片在线观看无app| 日韩无码精品一区二区三区| 国产三级播放| 无码人妻丰满熟妇啪啪网站| 综合一区| 超碰在线97国产| av天堂午夜精品一区| 成人免费午夜无码视频| 日本在线看片| 欧美亚洲另类视频| 日本久久精品一区二区三区| 成人啪啪一区二区三区| 91aaaa| 永久免费毛片在线播放| 午夜精品久久久久久不卡| 内射中出日韩无国产剧情 | 在线观看日韩av| 伊人影院99| 国产又大又硬又粗| 2019午夜三级网站理论| 亚洲淫| av性天堂网| 久久五月精品中文字幕| 日本久久夜夜一本婷婷| 久久99久久99精品蜜柚传媒| 国产精品美女一区二三区| 美女被抽插到哭内射视频免费| 波多野结衣伦理| 99综合视频| 国产精品无码av无码| 国产杨幂丝袜av在线播放|