2012-01-30 4 views
2

간단히 말해서 & 이벤트를 발생시키는 비율을 '늦추는'합리적인 시간 초과 또는 다른 방식으로 jQuery 이벤트 처리기를 코딩하는 의미있는 방법을 찾고 있습니다. 사용자가 의도적으로 또는 부주의하게 스팸하는 것을 방지해야합니다.jQuery - 사용자 스팸 이벤트 핸들러 중지 방법

대부분의 경우 이전 핸드러의 조작을 중지하는 것만으로도 충분합니다. 예를 들어 페이드 메뉴입니다. 단순히 애니메이션에 .stop()을 사용하면 충분합니다.

그러나 나는 지금 이벤트가 너무 비싸서 초당 1 ~ 2 회 이상 발사 할 수없는 무거운 페이지를 만들고 있습니다. 여러 가지 방법으로 그 이벤트를 해고하는 방법을 통해 자신의 빈도를 제한해야합니다. 더 기본 수준에서 실행됩니다.

문제의 예 : 내가 (여기 : http://brandonaaron.net/code/mousewheel/docs) 마우스 휠 플러그인을 사용하고

$(document).bind('mousewheel', function(e, delta){ 
    alert('you scrolled the mousewheel!'); 
    stopLoadsOfStuff(); 
    fadeHalfADozenImagesInAndOutAgain(); 
}); 

마우스, OS 또는 제조사 제공된 소프트웨어에 따라 등을 스크롤 속도는 격렬하게 다를 수 있습니다. 그 반짝이는 사과 터치 쥐와 90 년대의 오래된 쥐를 생각해보십시오. 스크롤을 사용하여 이벤트를 시작한 경우 이벤트가 실행 및 중지하는 데 매우 경제적 인 경우가 아니라면이를 현명한 무언가로 제한해야합니다. 나는 이미 시도했습니다

상황은 다음과 같습니다 클릭과 키보드 이벤트에 대한

: true로 설정 각 이벤트에 대한 부울을 설정

, 이벤트가 발생하고 그것을 설정하는 콜백을 사용하는 동안 거짓으로 다시. bool이 false 인 경우에만 이벤트가 실행됩니다. 이것은 효과적이지만 지저분하고 약간 특이합니다. 마우스 휠 이벤트의

:

나는 정수 변수에게 마우스 휠 이벤트가 감지 될 때마다 증가하고,이 핸들러는 실행에 0으로 재설정보다 5보다 인 경우에만 조치를 취할 것입니다.

TL; DR

나는 내가 그들에게 100 번을 실행하기 위해 시도하는 사용자에 대한 걱정없이 고가의 이벤트 핸들러를 사용할 수 있도록하는 이벤트 핸들러의 실행 속도를 제한하기 위해 확장, 간단한 방법이 필요합니다 둘째 :

는 어떤 도움 당신은 jQuery debounce plugin에 관심이있을 수

+1

** 이벤트 디 바운싱/스로틀 링 **을 찾고 있습니다. 이것이 당신의 목적에 충분한 지 모르겠다 : http://benalman.com/projects/jquery-throttle-debounce-plugin/ –

답변

2

감사.

플러그인의 개념은 전달한 핸들러를 다른 함수로 래핑하는 것으로,이 함수는 호출 간격을 x 밀리 초 단위로 제한하여 속도를 제한합니다.

+0

그게 내가 필요로하는 것과 아주 비슷하다. 나는 그것을 시험해 볼 것이다. 덕분에 – jammypeach

+0

은 ' 이 작업을 수행 할 - jQuery 1.7.x 지원되지 않을 수도 있습니다. ( – jammypeach

+0

마지막 긁힌 그것을 밖으로 :) – jammypeach

관련 문제