国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

防抖(debounce)和節(jié)流(throttle)的學(xué)習(xí)總結(jié)

caspar / 1070人閱讀

摘要:節(jié)流原理為事件觸發(fā)時(shí)調(diào)用的函數(shù)添加時(shí)間閾值,只有在超過(guò)時(shí)間閾值時(shí)觸發(fā)事件,回調(diào)函數(shù)才會(huì)被調(diào)用。

防抖(debounce)

用戶與網(wǎng)頁(yè)進(jìn)行交互時(shí),經(jīng)常出現(xiàn)根據(jù)頁(yè)面的狀態(tài)、數(shù)據(jù)向服務(wù)器請(qǐng)求、發(fā)送數(shù)據(jù)的場(chǎng)景,比如:根據(jù)用戶的輸入數(shù)據(jù)進(jìn)行實(shí)時(shí)校驗(yàn),下拉請(qǐng)求數(shù)據(jù)等等,如果用戶操作過(guò)于頻繁,頁(yè)面狀態(tài)、數(shù)據(jù)變化的太快太頻繁,會(huì)進(jìn)行多次請(qǐng)求,這其中的很多請(qǐng)求都是沒(méi)有意義的,實(shí)時(shí)校驗(yàn),只需要校驗(yàn)用戶最后的輸入,下拉請(qǐng)求只需要在用戶下拉的最后一次進(jìn)行請(qǐng)求。這就需要防抖來(lái)實(shí)現(xiàn)了。
防抖的原理:為事件觸發(fā)時(shí)調(diào)用的函數(shù)添加延遲,如果在延遲內(nèi)頻繁觸發(fā),上一次的事件觸發(fā)會(huì)被取消,延遲將會(huì)重新計(jì)算,這樣一來(lái)用戶的最會(huì)一次觸發(fā),函數(shù)才會(huì)真正被調(diào)用。

//fn為回調(diào)函數(shù),delay是人為設(shè)置的延遲
function debounce(fn, delay){
    var timeout; //定時(shí)器編號(hào)
    return function(){
        //context是回調(diào)函數(shù)運(yùn)行的環(huán)境, 
        //args是回調(diào)函數(shù)的參數(shù),一般是addEventListener傳進(jìn)來(lái)的event變量
        var context = this, args = arguments;
        clearTimeout(timeout);//當(dāng)用戶頻繁觸發(fā)事件時(shí),定時(shí)器被清除
        timeout = setTimeout(function(){
            fn.apply(context, args);
        }, delay);
    }
}
//調(diào)用方式
var validate = debounce(function(){
    //do somthing
}, 200);
document.querySelector("input").addEventListener("input", validate);
節(jié)流(throttle)

節(jié)流,顧名思義就是把管道的閥門(mén)稍稍關(guān)緊一點(diǎn),讓水流動(dòng)的少一點(diǎn)。在javascript中,很多事件是連續(xù)觸發(fā)的,比如:resize,mousemove。我們不希望事件頻繁觸發(fā),如果采用防抖方案,事件只在延遲時(shí)間內(nèi)觸發(fā)最后一次,這顯然是不合理的,我們只需要讓其觸發(fā)的頻率低一些,這就需要節(jié)流來(lái)實(shí)現(xiàn)。
節(jié)流原理:為事件觸發(fā)時(shí)調(diào)用的函數(shù)添加時(shí)間閾值,只有在超過(guò)時(shí)間閾值時(shí)觸發(fā)事件,回調(diào)函數(shù)才會(huì)被調(diào)用。

//fn為回調(diào)函數(shù),threshhold是時(shí)間閾值
function throttle(fn, threshhold){
    var start = new Date(), timeout;
    var threshhold = threshhold || 160;
    return function(){
        //context是回調(diào)函數(shù)運(yùn)行的環(huán)境, 
        //args是回調(diào)函數(shù)的參數(shù),一般是addEventListener傳進(jìn)來(lái)的event變量
        var context = this, args = arguments, cur = new Date();
        clearTimeout(timeout);
        //通過(guò)連續(xù)兩次觸發(fā)的時(shí)間間隔,決定是否調(diào)用回調(diào)函數(shù)
        if(cur - start >= threshhold){
            fn.apply(context, args);
            start = cur;
        }else{
            //當(dāng)連續(xù)觸發(fā)行為結(jié)束時(shí),還要進(jìn)行最后一次函數(shù)回調(diào)
            timeout = setTimeout(function(){
                fn.apply(context, args)
            }, threshhold);
        }
    }
}
//調(diào)用函數(shù)
var mousemove = throttle(function(e) {
 //do somthing
});

// 綁定監(jiān)聽(tīng)
document.querySelector("#panel").addEventListener("mousemove", mousemove);

以下是html頁(yè)面

 

最后,大家可以通過(guò)這個(gè)動(dòng)畫(huà)來(lái)理解,學(xué)習(xí)防抖和節(jié)流。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/102600.html

相關(guān)文章

  • debounce(防抖)throttle(節(jié)流)

    摘要:防抖防抖,簡(jiǎn)單來(lái)說(shuō)就是防止抖動(dòng)。兩者間的核心區(qū)別就在于持續(xù)觸發(fā)事件時(shí),前者合并事件并在最后時(shí)間去觸發(fā)事件,而后者則是隔間時(shí)間觸發(fā)一次關(guān)鍵知識(shí)點(diǎn)定時(shí)器閉包資源在線測(cè)試源代碼 防抖和節(jié)流 窗口的resize、scroll,輸入框內(nèi)容校驗(yàn)等操作時(shí),如果這些操作處理函數(shù)較為復(fù)雜或頁(yè)面頻繁重渲染等操作時(shí),如果事件觸發(fā)的頻率無(wú)限制,會(huì)加重瀏覽器的負(fù)擔(dān),導(dǎo)致用戶體驗(yàn)非常糟糕。此時(shí)我們可以采用debo...

    2bdenny 評(píng)論0 收藏0
  • debounce(防抖)throttle(節(jié)流)

    摘要:防抖防抖,簡(jiǎn)單來(lái)說(shuō)就是防止抖動(dòng)。兩者間的核心區(qū)別就在于持續(xù)觸發(fā)事件時(shí),前者合并事件并在最后時(shí)間去觸發(fā)事件,而后者則是隔間時(shí)間觸發(fā)一次關(guān)鍵知識(shí)點(diǎn)定時(shí)器閉包資源在線測(cè)試源代碼 防抖和節(jié)流 窗口的resize、scroll,輸入框內(nèi)容校驗(yàn)等操作時(shí),如果這些操作處理函數(shù)較為復(fù)雜或頁(yè)面頻繁重渲染等操作時(shí),如果事件觸發(fā)的頻率無(wú)限制,會(huì)加重瀏覽器的負(fù)擔(dān),導(dǎo)致用戶體驗(yàn)非常糟糕。此時(shí)我們可以采用debo...

    ssshooter 評(píng)論0 收藏0
  • 防抖節(jié)流(源碼學(xué)習(xí)

    摘要:防抖與節(jié)流源碼學(xué)習(xí)最近自己擼了一個(gè)輪播圖,在點(diǎn)擊切換的時(shí)候,為了尋求更好的用戶體驗(yàn),引入了節(jié)流,在此記錄對(duì)源碼的學(xué)習(xí)過(guò)程源碼來(lái)源防抖函數(shù)防抖使用場(chǎng)景現(xiàn)在我們需要做一個(gè)搜索框,當(dāng)用戶輸入文字,執(zhí)行事件的時(shí)候,需要發(fā)出異步請(qǐng)求去進(jìn)行結(jié)果查詢。 防抖與節(jié)流(源碼學(xué)習(xí)) 最近自己擼了一個(gè)輪播圖,在點(diǎn)擊切換的時(shí)候,為了尋求更好的用戶體驗(yàn),引入了節(jié)流,在此記錄對(duì)源碼的學(xué)習(xí)過(guò)程源碼來(lái)源:unders...

    instein 評(píng)論0 收藏0
  • 說(shuō)說(shuō)JavaScript中函數(shù)防抖 (Debounce) 與節(jié)流 (Throttle)

    摘要:基礎(chǔ)防抖我們現(xiàn)在寫(xiě)一個(gè)最基礎(chǔ)的防抖處理標(biāo)記事件也做如下改寫(xiě)現(xiàn)在試一下,我們會(huì)發(fā)現(xiàn)只有我們停止?jié)L動(dòng)秒鐘的時(shí)候,控制臺(tái)才會(huì)打印出一行隨機(jī)數(shù)。 為何要防抖和節(jié)流 有時(shí)候會(huì)在項(xiàng)目開(kāi)發(fā)中頻繁地觸發(fā)一些事件,如 resize、 scroll、 keyup、 keydown等,或者諸如輸入框的實(shí)時(shí)搜索功能,我們知道如果事件處理函數(shù)無(wú)限制調(diào)用,會(huì)大大加重瀏覽器的工作量,有可能導(dǎo)致頁(yè)面卡頓影響體驗(yàn);后臺(tái)...

    yanwei 評(píng)論0 收藏0
  • 探究防抖(debounce)節(jié)流(throttle)

    摘要:如果使用的是防抖,那么得等我們停止?jié)L動(dòng)之后一段時(shí)間才會(huì)加載新的內(nèi)容,沒(méi)有那種無(wú)限滾動(dòng)的流暢感。這時(shí)候,我們就可以使用節(jié)流,將事件有效觸發(fā)的頻率降低的同時(shí)給用戶流暢的瀏覽體驗(yàn)。調(diào)用,瀏覽器會(huì)在下次刷新的時(shí)候執(zhí)行指定回調(diào)函數(shù)。 本文來(lái)自我的博客,歡迎大家去GitHub上star我的博客 本文從防抖和節(jié)流出發(fā),分析它們的特性,并拓展一種特殊的節(jié)流方式requestAnimationFrame...

    keke 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<