2012-07-22 2 views
1

이 작업을 수행 할 수 있습니까? 한 시간 내에 많은 이벤트가 많이 발생한다고 가정합니다. 이전 이벤트를 모두 취소하고 마지막 이벤트 만 사용합니다.마지막 이벤트를 제외하고 모든 이벤트 취소

마지막 이벤트는 3 초 동안 더 이상 이벤트가 없을 때만 한 번만 발생합니다.

예를 들면. 버튼이 있습니다. 우리는 사용자가 원하는만큼이 버튼을 여러 번 클릭하도록 할 것이고 우리는이 버튼을 비활성화하지 않을 것입니다. 사용자가 얼마나 많은 시간을 클릭했는지에 상관없이 마지막 클릭으로 한 번의 클릭 수로 간주됩니다. 3 초 이내에 더 이상 클릭이 없을 때 클릭 이벤트가 수행됩니다.

+0

안녕하세요, [당신은 어떤 바이올린 예를 제공하시기 바랍니다 수 있습니다 (http://jsfiddle.net/AvczB/)? – Stano

답변

3

당신이 찾고있는 것을 debouncing이라고합니다. 이 작업에는 이미 훌륭한 plugin/library from Ben Alman이 있습니다.

(function() { 
    var button = document.getElementsByTagName("button")[0], 
     func = Cowboy.debounce(1000, function() { console.log("click fired!"); }); 

    button.addEventListener("click", func); 
}())​ 

fiddle

+0

감사합니다. 그것에 대해 몰랐습니다 – user907860

+0

카우보이는 jquery 1.7.2와 호환되지 않습니다. 어쨌든 여전히 큰 도움이됩니다. –

+0

@SarawutPositwinyu 맞지 않습니다;) jQuery로 질문을 태그하지 않았으므로 바닐라 JS 솔루션을 찾고 있다고 생각했습니다. jQuery를 사용할 수있는 경우 플러그인은 자신의 '카우보이'를 만드는 대신 jQuery 네임 스페이스에 두 개의 함수를 추가합니다. 따라서'Cowboy.debounce' 대신'$ .debounce'를 사용해야합니다. Ben Almans 사이트에 모두 문서화되어 있습니다. – Andreas

1
var domButton = document.getElementById('some-button'), 
    timeOut; 
domButton.addEventListener('click', function(e) { 
    if (e.clientX && e.clientY) { 
     e.preventDefault(); 
     clearTimeout(timeOut); 
     timeOut=setTimeout(function({document.getElementById('somebutton').click()},3000); 
    } 
},false) 
관련 문제