2

我有一个标题,当鼠标悬停在标题上时,我想在其右侧显示一个图像。

  • 我在设置为 true/false 的状态下维护一个变量editMode

  • 然后我使用 onMouseOver 和 onMouse 事件有条件地渲染图像。

现在,当我将鼠标悬停在标题上时,编辑模式设置为 true 并显示图像,当我将光标移出标题时,editMode 设置为 false 并且图像消失。

我在设置为真/假的状态下维护一个变量editMode,有条件地使用onMouseOver和onMouse渲染图像:

问题:当我将鼠标悬停在编辑图标上时,它开始闪烁。

class TempComponent extends React.Component {
constructor() {
    super()
    this.editModeToggler = this.editModeToggler.bind(this)
    this.state = {
        editMode: false
    }
}

editModeToggler() {
    console.log('called')
    this.setState({editMode: !this.state.editMode})
}

render() {
  return(
    <div>
      <h3
        onMouseOut={this.editModeToggler} 
        onMouseOver={this.editModeToggler}
      >
        Title
      </h3>
      {this.state.editMode?
            <img src='http://www.rebanet.it/images/banners/iscrizioni.png' />
        :
        null
      }
    </div>
  )
 }
}

你可以在这里找到这段代码:http: //jsfiddle.net/Lu4w4v1c/2/

我该如何停止这种闪烁。我也尝试过按照这里的建议使用 onMouseEnter 和 onMouseLeave ,但它没有用。我不知道如何使用这两个事件导致与我想要的相反。第一次加载组件时,一切都很好,但只要我将鼠标悬停在图标上,整个动态就会发生变化。当鼠标不在标题上时图标显示,当鼠标在标题上时不显示。请帮忙

带有 onMouseEnter 和 onMouseLeave 的代码在这里:http: //jsfiddle.net/Lu4w4v1c/3/

4

2 回答 2

2

当您在 h3 上有监听器时,最初图像没有渲染,所以第一次一切似乎都工作正常,但是一旦图像被渲染并且您将鼠标悬停在图像上,它就会响应标题的 mouseout 事件并隐藏图像立即触发 h3 上的鼠标悬停,导致闪烁行为。

要解决您的问题,您只需将侦听器附加到容器上即可。更新了你的小提琴http://jsfiddle.net/Lu4w4v1c/4/

<div  onMouseOut={this.editModeToggler} 
    onMouseOver={this.editModeToggler}>
  <h3>
    Title
  </h3>
  {this.state.editMode?
        <img src='http://www.rebanet.it/images/banners/iscrizioni.png' />
    :
    null
  }
</div>
于 2016-12-19T08:39:13.483 回答
2

如果你有一个容器要执行 onmouseover 事件,在里面渲染一个 div,你应该使用 onMouseLeave。示例小提琴也有 onmouseleave 。

https://www.w3schools.com/jquery/tryit.asp?filename=tryjquery_event_mouseleave_mouseout

这说明了问题

于 2017-03-27T09:56:37.870 回答