有没有办法检测 React JS 中的中间点击?

amb*_*bar 7 html javascript mouseevent reactjs

我试图找到一种方法来检测 React JS 中的中间点击事件,但到目前为止还没有成功。

在 Chrome React 的 Synthetic Click 事件中确实显示了单击的按钮 ->

mouseClickEvent.button === 0 // Left

mouseClickEvent.button === 1 // Middle but it does not execute the code at all

mouseClickEvent.button === 2 // Right (There is also onContextMenu with event.preventDefault() )
Run Code Online (Sandbox Code Playgroud)

请分享您的看法。

Jac*_*ger 12

如果您使用的是无状态组件:

JS

const mouseDownHandler = ( event ) => {
  if( event.button === 1 ) {
    // do something on middle mouse button click
  }
}
Run Code Online (Sandbox Code Playgroud)

JSX

<div onMouseDown={mouseDownHandler}>Click me</div>
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。

  • click !== mousedown - 它们是完全不同的事件,具有完全不同的行为。请改用 onAuxClick。 (2认同)

Omi*_*yan 12

现代的方法是通过onAuxClick事件:

import Card from 'react-bootstrap/Card';
import React, { Component } from 'react';

export class MyComponent extends Component {

  onAuxClick(event) {
    if (event.button === 1) {
      // Middle mouse button has been clicked! Do what you will with it...
    }
  }
    
  render() {
    return (
      <Card onAuxClick={this.onAuxClick.bind(this)}>
      </Card>
    );
}
Run Code Online (Sandbox Code Playgroud)


Shu*_*tri 5

您可以添加一个mouseDown事件,然后检测中间按钮的点击,例如:

handleMouseDown = (event) => {
   if(event.button === 1) {
      // do something on middle mouse button click
   }
}
Run Code Online (Sandbox Code Playgroud)

您的代码可能如下所示:

class App extends React.Component {
   constructor() {
     super();

     this.onMouseDown = this.onMouseDown.bind(this);
   }
   componentDidMount() {
       document.addEventListener('mousedown', this.onMouseDown);
   }
   componentWillUnmount() {
       document.removeEventListener('mousedown', this.onMouseDown);
   }
   onMouseDown(event) {
       if (event.button === 1) {
          // do something on middle mouse button click
       }
   }
   render() {
     // ...
   }
}
Run Code Online (Sandbox Code Playgroud)

您可以在MouseEvent.button此处找到更多信息:https : //developer.mozilla.org/en-US/docs/Web/API/MouseEvent/button

当心。使用mousedown并不总是能让你得到你想要的行为。“点击”既是 amousedown又是 a ,mouseup其中x和 的y值没有改变。理想情况下,您的解决方案会将xy值存储在 a 上mousedown,当mouseup发生时,您将进行测量以确保它们位于同一位置。

甚至优于mousedownpointerdown。这配置了与“触摸”和“笔”事件以及“鼠标”事件的兼容性。如果指针事件与您应用的兼容浏览器兼容,我强烈推荐此方法。