스로틀 이벤트

1646 단어 자바 script
일부 사건 은 빈번하게 발생 할 수 있 습 니 다. 예 를 들 어 scroll resize mousemove keyup 은 이러한 사건 에 함 수 를 연결 하고 이 함수 들 이 성능 을 소모 하 는 계산 을 하려 면 페이지 가 급 하고 느 리 며 반응 이 무 뎌 질 수 있 습 니 다. 이 때 는 절 류 사건 을 사용 하여 함수 가 촉발 되 는 빈 도 를 제어 해 야 합 니 다.
function handler() {
    //           
    //     ajax  

    console.log('2333');
}

$(window).scroll(handler); //     handler,    

방법 1 setTimeout
var timer = 0;

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

방법 2 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 () 가 트리거 하 는 빈 도 를 줄 였 을 뿐 입 니 다. 그러나 여러 번 트리거 할 수 있 습 니 다.
방법 3 clearTimeout
var searchTimeout = null;
$('#input').on('keyup', function(event) {
    //  keyup          ,   keyup  1s    handler
    clearTimeout(searchTimeout);
    searchTimeout = setTimeout(function() {
        handler();
    }, 1000);
});

참고: < jQuery 기초 강좌 >

좋은 웹페이지 즐겨찾기