2011-03-16 2 views
0

특정 요소 위에서 마우스 왼쪽 버튼을 누르고있는 동안 특정 간격으로 함수를 정기적으로 호출하고 싶습니다. jQuery에서이 작업을 수행하는 간단한 방법이 있습니까? 아니면 바닐라 javascript와 setInterval/setTimeout을 사용해야합니까?jQuery - mousedown에서 일반 함수 호출 트리거

감사

답변

2

는 여기 mousehold 이벤트를 제공하는 jQuery 플러그인입니다.

http://remysharp.com/2006/12/15/jquery-mousehold-event/

당신은 demo page에 가서 어떻게 작동하는지 볼 수 있습니다 마지막 입력 상자의 오른쪽에있는 화살표 중 하나를 클릭합니다. 다음과 같이

+1

감사합니다. 나는 더 많은 플러그인/libs를 피하려고 노력하고 있지만, Sime의 해결책이 효과가 없다면 나는 그것을 시도 할 것이다. –

0

jQuery를 결과로 지원을보고 어떤 기능을 제공하지 않습니다, 당신은 바닐라의 setTimeout 기능을 사용할 수 있습니다

HTML을 :

var timer; 

function functionToRun() { 
    // Function code here... 
    functionToRun(); 
} 

var inFunction = function() { 
    timer = window.setTimeout(functionToRun, intervalToRunFor); 
} 

var outFunction = function() { 
    window.clearTimeout(timer); 
} 

$('selector').hover(function() { inFunction, outFunction } 
+0

이 예제는 호버링에 사용되지만 @Richard는 왼쪽 마우스 버튼을 누르고있는 솔루션을 원합니다. – jessegavin

+1

이 코드를 작성하면 선택한 요소 위에 마우스를 올리 자마자 무한 루프가됩니다. – Alnitak

0
var mouseDown = false; 

$('#yourID').bind('click', function() { 
    mouseDown = true; 
}); 

$('#yourID').bind('mouseup', function() { 
    mouseDown = false; 
}); 

setInterval('checkOut();',5000); 

function checkOut() { 
    if(mouseDown) alert('mouse is down! Whatup!'); 
}); 
+0

이벤트가 발생했는지 여부에 관계없이 checkOut() 함수가 5 초마다 호출됩니다. 마우스를 아래로 시작하고 마우스를 위로 올려 타이머가 필요합니다. –

+0

내 편이 잘못되었습니다. 5 초마다 마우스를 누르면 실행되는 기능이 필요하다고 생각했습니다. – rsplak

2

이것은 내가 어떻게 할 것입니다 :

<div id="box"></div> 

자바 스크립트 :

var box = $('#box'), 
    iv; 

function foo() { 
    box.append('*');  
} 

box.bind('mousedown mouseup', function(e) { 
    $(this).toggleClass('hold', e.type === 'mousedown'); 
}); 

iv = setInterval(function() {  
    box.hasClass('hold') && foo(); 
}, 1000); 

따라서 처리기를 mousedownmouseup 이벤트에 바인딩하고 그에 따라 hold CSS 클래스를 설정합니다. 한편, 독립적 인 타이머 ivhold 클래스가 설정되었는지 여부를 검사하고 그에 따라 함수 (foo)를 호출합니다.

라이브 데모 : 제안에 대한http://jsfiddle.net/simevidas/7CUFE/

+0

jsfiddle를 보았습니다. 그건 잘 작동하는 것, 감사합니다 Logged –