撙节事宜

有一些事宜是会频仍触发的,比方scroll resize mousemove keyup
假如在这些事宜上绑定函数,而且这些函数要举行耗机能的盘算,那末会致使页面忽急忽缓,反应迟钝,这时候就需要运用撙节事宜来掌握函数被触发的频次。

function handler() {
    // 处置惩罚一些耗机能的盘算
    // 或许发送ajax要求

    console.log('2333');
}

$(window).scroll(handler); // 重复触发handler,影响机能

要领一 setTimeout

var timer = 0;

$(window).scroll(function() {
    if (!timer) {
        timer = setTimeout(function() {
            handler();
            timer = 0;
        }, 1000);
    }
});

要领二 setInterval

// scroll虽然绑定了一个会频仍触发的函数,然则该函数只是转变scrolled的值,不会影响机能

var scrolled = false;

$(window).on('scroll', function() {
    scrolled = true;
});

setInterval(function() {
    if (scrolled) {
        handler();
        scrolled = false;
    }
}, 1000);

设想一个场景:及时搜刮

在输入框输入关键词后就要立时显现效果,一般做法是在keyup上绑定handler处置惩罚函数,发送ajax要求。然则假如用户输入速度很快,那末keyup会触发屡次,发送多个ajax要求,而我们只是想要在用户住手输入的时候凌驾1s后才发送ajax

这和前面的scroll事宜又有些差别,在这里我只想handler函数在keyup触发后实行一次
前面两种要领只是减少了handler()触发的频次,然则仍然会触发屡次

要领三 clearTimeout

var searchTimeout = null;
$('#input').on('keyup', function(event) {
    //每次keyup时直接作废上次计时器,只有当keyup凌驾1s时才实行handler
    clearTimeout(searchTimeout);
    searchTimeout = setTimeout(function() {
        handler();
    }, 1000);
});

参考:《jQuery基础教程》

    原文作者:深红
    原文地址: https://segmentfault.com/a/1190000007421282
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞