2012-01-11 3 views
2

마우스 버튼의 상태 (눌렀다가 놓은 상태)를 확인할 수 있습니다. 이 jquery 이벤트 처리의 목적을 알고 있지만 마우스의 단추를 단추의 위치를 ​​변경할 필요없이 누르지 않은 경우 함수를 수행 할 수 있는지 궁금해. 혹은 그 반대로도)? 코드 아래마우스 버튼의 위치를 ​​알아내는 부울 함수

+1

아니요, 실제로는별로 의미가 없습니다. 브라우저는 계속해서 모든 것을 모니터링하는 모델을 노출하지 않습니다. 오히려, 세계의 상태는 이벤트가 발생하면 캡처되어 등록 된 핸들러에게 넘겨집니다. 또한 캡처 된 이벤트 정보는 대개 이벤트 유형과 관련이 있습니다. – Pointy

+0

문구를 다시 사용할 수 있습니까? 나는 이것을 네 번 읽었지만 여전히 이해하지 못합니다. (아마 나 일뿐입니다) – karim79

+0

오해 했습니까? 아니면 마우스 버튼을 눌렀거나 놓았을 때가 아닌 언제든지 마우스 버튼의 상태를 알 수 있었습니까? – Jasper

답변

3

시도, DEMO 여기

$(document).mousedown (function() { 
    $('#result').text('Pressed'); 
}).mouseup (function() { 
    $('#result').text('Released'); 
}); 
1

당신은 변경된 마우스 이벤트를 감지 할 mousedownmouseup 이벤트를 사용할 수 있습니다. 이 이벤트는 window에 바인딩되어야합니다. 데모 : 부울 맥락에서

0 Mouse released false 
1 Left click  true 
2 Middle click  true 
3 Right click  true 

마우스를 아래로하지 않을 때 함수 반환 값은 false로 평가 http://jsfiddle.net/uwzbn/

var mouseState = (function(){ 
    var mousestatus = 0; 
    $(window).mousedown(function(e) { 
     mousestatus = e.which; 
    }).mouseup(function(e){ 
     mousestatus = 0; 
    }); 
    return function() { 
     return mousestatus; 
    } 
})(); 

이 기능은 네 가지 값을 반환합니다. 마우스를 누르면 어떤 마우스 키를 누르는 지 (보너스로) 읽을 수 있습니다.

+0

2 버튼을 눌렀다가 1을 놓으면 상태가 0이 되더라도 하나의 버튼이 남아 있어도 이것이 너무 영리한 지 궁금해. : p – Esailija

+0

@Esailija 현재의 모든 문제가이 문제로 고통 받고 있습니다. Afaik, 이것에 대한 신뢰할만한 해결책은 없습니다 : 반대의 경우도 가능합니다. 컨텍스트 메뉴를 열고 메뉴 안에서 마우스를 놓을 수 있습니다. 마우스 상태가 3 일 때 멈출 것입니다. –

+0

좀 더 복잡한 코드로 극복 할 수 있습니다 (단지 부울을 추적하는 경우 훨씬 덜 복잡합니다). 그러나 컨텍스트 메뉴는 극복 할 수 없습니다. – Esailija

1
$(function() { 

    //setup flag for the state of the mouse button and create an object that converts an event type into a boolean for the flag 
    var mousePressed = false, 
     mouseConvert = { 
      mousedown : true, 
      mouseup : false 
     }; 

    //bind to the document's mousedown and mouseup events to change the flag when necessary 
    $(document).on('mousedown mouseup', function (event) { 

     //set the flag to the new state of the mouse button 
     mousePressed = mouseConvert[event.type]; 

     //if you only want to watch one mouse button and not all of them then 
     //you can create an if/then statement here that checks event.which 
     //and only updates the flag if it is the button you want, check-out Rob W.'s 
     //answer to see the different values for event.which with respect to the mouse 
    }); 
    //now you can check the value of the `mousePressed` variable, if it is equal to `true` then the mouse is currently pressed 
}); 
관련 문제