IMO
(및 quirksmode's)는, IE의 bitmasking는 W3C 버전보다 낫다. 그것은 약간 더 많은 유연성을 제공합니다. 둘 다 (누를 수있는 총 버튼과 최신 버튼 누름) 더 좋을 것입니다.
내가하고있는 것을 이미 수행하고있는 라이브러리 나 스크립트를 모르겠다. 대부분의 개발자는 콤보 클릭에 특정 동작을 적용하고 싶지 않으면 콤보 클릭을 무시할 것이라고 생각한다. 또한 다소 까다 롭습니다. 전체 문서에 대해 onmousedown
과 onmouseup
을 모두 감지하고 마우스 버튼의 상태를 기록해야합니다. 그런 다음 마술을하기 원하는 요소에서 이전 마우스 상태를 빼십시오. 뭔가 (테스트 한) :
if (document.attachEvent)
{
(function()
{
var mState = 0;
document.documentElement.attachEvent("onmousedown", function()
{
mState += event.button;
});
document.documentElement.attachEvent("onmouseup", function()
{
mState -= event.button;
});
document.getElementById("jim").attachEvent("onmousedown", function()
{
var realButton = event.button - mState;
alert(realButton);
// Your code here
});
})();
}
물론,이 스크립트에는 잘못 될 수있는 내용 만 있습니다. 예를 들어, 나의 예제에서는 실제 버튼 상태와 함께 팝업 창이 나타납니다. 해당 경고 대화 상자가 올라간 상태에서 버튼을 놓으면 문서가 마우스 업을 감지하지 못해 모든 것을 버리게됩니다. 마찬가지로 이 documentElement의 이벤트 핸들러까지 전파를 중지하는 다른 요소에 대한 mouseup 또는 mousedown 이벤트는 중단 될 수 있습니다.
내 조언을 원한다면 "올바른"마우스 버튼을 클릭하거나 모두 무시하고 콤보 마우스를 클릭하여 메시지를 표시하십시오. 이러한 옵션 중 하나가 해킹 방법보다 낫습니다.
비트 마스킹이 좋지 않습니다. 각 버튼은 이미 자체 마우스 이벤트를 전송하기 때문에 하나의 이벤트에서 마우스 이벤트를 동시에 감지 할 필요가 없습니다. 그래서 IE에서는 중복 이벤트가 발생합니다. 먼저 LEFT 버튼을 눌렀다가 LEFT + RIGHT 버튼을 눌렀다는 것을 알려주지 만 LEFT 버튼을 놓지 않고 RIGHT 버튼을 누르는 것뿐입니다. 그것은 큰 차이를 만듭니다. W3C 모델이나 오래된 넷스케이프 모델에서도 완벽하게 작동합니다. 그러나 IE에서는 엉덩이가 고통 스럽습니다. – kayahr
@ kayahr : 불행히도 랩톱에서 작업 중이며 테스트 할 세 번째 마우스 버튼이 없습니다. 하나의 버튼을 누르면 다른 하나는 제안하는 동작을 유발합니다. 정확히 같은 시간에 *를 두 번 누르면 가운데 클릭이 트리거됩니다. 나는 항상 다른 두 버튼에 대해서도 마찬가지라고 생각했습니다. 정확히 같은 시간에 왼쪽 + 가운데를 누르면 버튼 값 5로 이벤트 하나가 트리거됩니다. 비트 마스킹은 수행하려는 작업에 도움이되지 않지만 유연성을 제공한다고 주장합니다. 전체적으로. 예를 들어 웹 앱이 콤보 버튼 클릭에 대한 단축키를 제공 할 수 있습니다. –