2009-11-23 5 views
0

mousemove 이벤트가 왼쪽 마우스 버튼을 누른 상태에서만 활성화되고 버튼이 해제되면 mousemove 이벤트가 중지되도록 jQuery로 어떻게 할 수 있습니까?jQuery : 이벤트에 관한 질문

+1

그냥 mousedown''에 mousemove''에 결합하고, mouseup''에 바인딩을 해제. –

답변

1

간단한 방법은 플래그를 유지하는 것입니다.이 플래그는 왼쪽 버튼을 누른 상태에서만 true로 설정됩니다. 마우스 왼쪽 버튼을 눌렀을 때 true로 설정하고 놓을 때 false로 재설정해야한다는 의미입니다. 그런 다음 플래그가 참인 경우에만 mousemove에서 작동합니다.

이것은 jQuery 특정 솔루션이 아니지만 이와 같은 문제에 대한 일반적인 패턴이므로 jQuery가 더 나은 솔루션을 제공 할 수 있습니다.

왼쪽 버튼을 누른 상태에서 입력 포커스를 잃거나 마우스 커서가 div 밖으로 나가는 것과 같은 특별한 경우를 처리해야 할 수도 있습니다.

5

여기에서 mousedown의 mousemove 이벤트를 바인드하고 mouseup에 바인드 해제합니다. jQuery에서 멋진 기능을 사용하여이 선택기에 추가 된 다른 mousemove 이벤트가있을 수 있지만 바인딩 해제하려는 이벤트 만 제거됩니다. 그것들은 Namespaced Events입니다.

$("#yourdivid").mousedown(function(e){ 
    if(e.which == 1){ 
     $(this).bind('mousemove.coolnamespace', function(e){ 
      // Your mousemove event 
     }); 
    } 
}).mouseup(function(e){ 
    if(e.which == 1) $(this).unbind('mousemove.coolnamespace'); 
}) 

편집 : 정규화 된 필드 which를 사용하는 내 대답을 업데이트. jQuery는 이것을 1 = 왼쪽, 2 = 중간, 3 = 오른쪽으로 정규화합니다. button 값은 브라우저에 따라 다릅니다.

0

mousedown 이벤트를 바인드하고 mousemove를 해당 함수 내에서 호출하고 jQuery unbind 이벤트를 사용하여 mousemove를 제거합니다.

var $button = $("ELEMENT HERE");

 $button.mousedown(function(){ 
      $(this).mousemove(function(){ 
       //Events here 
      }); 
     }).mouseup(function(){ 
      $(this).unbind("mousemove"); 
     });