web-dev-qa-db-ja.com

マウスの左ボタンの押下を検出

私はW3CとMSによって作成されたマウスボタンでこの混乱を嫌います! mousedownイベントが発生したときにマウスの左ボタンが押されたかどうかを知りたい。

私はこのコードを使用します

// Return true if evt carries left mouse button press
function detectLeftButton(evt) {
  // W3C
  if (window.event == null) {
    return (evt.button == 0)
  }
  // IE
  else {
    return (evt.button == 1);
  }
}

ただし、OperaおよびChromeでは動作しません。window.eventもそこに存在するためです。

だから私は何をしますか?ブラウザーはある程度検出されていますが、一部のブラウザーが最近行っているすべてのマスキングでは信頼できないことがわかっています。マウスの左ボタンを確実に検出するにはどうすればよいですか?

31
Boris Hamanov

更新された回答。以下は、左マウスボタンのみが押されているかどうかを検出します。

function detectLeftButton(evt) {
    evt = evt || window.event;
    if ("buttons" in evt) {
        return evt.buttons == 1;
    }
    var button = evt.which || evt.button;
    return button == 1;
}

JavaScriptでのマウスイベントの処理の詳細については、 http://unixpapa.com/js/mouse.html を試してください。

41
Tim Down

現在、 W3C標準event.buttonsプロパティがサポートされています 標準モードのIE9 、および Gecko 15 +

W3Cは完全に詰め込まれています event.buttonプロパティを上げるため、標準に準拠したブラウザーではevent.buttonは0ですが、標準より前に作成されたブラウザーではevent.buttonは1です。

したがって、コードmustは、古いブラウザーを除いてevent.buttonの使用を避けます。次のコードが機能するはずです。

function detectLeftButton(event) {
    if (event.metaKey || event.ctrlKey || event.altKey || event.shiftKey) {
        return false;
    } else if ('buttons' in event) {
        return event.buttons === 1;
    } else if ('which' in event) {
        return event.which === 1;
    } else {
        return (event.button == 1 || event.type == 'click');
    }
}
10
robocat

次のコードを使用できます-

onmouseup="if(window.event.which==1){//code for left click}
           else if(window.event.which==3){//code for right click}"
0
Rajesh Paul

Event.buttonsがChromeで機能するようになりましたが、Safariはまだサポートしていません。回避策の1つは、次のようなドキュメントレベルまたは親レベルでonmousedownおよびonmouseupイベントを使用することです。onmousedown = "bMouseDown = true" onmouseup = "bMouseDown = false"

0
Igor Krupitsky