html - MouseLeave 事件未触发 anchor 元素

标签 html css reactjs hover mouseleave

我有一个 codepen 的链接,问题最好在 Chrome 中观察:

https://codepen.io/pkroupoderov/pen/jdRowv

当用户将鼠标快速移到多个图像上时,有时不会触发 mouseLeave 事件,这意味着某些图像仍会应用灰度滤镜。如何解决?如果我使用 div 而不是 anchor 元素,它就完全可以正常工作。我应该稍微更改标记或将某些样式应用于 anchor 元素吗?或者也许我应该改用 React-Bootstrap 中的一些组件?

我正在尝试在用户将鼠标悬停在一张图片上时创建叠加效果,就像在 Instagram 上一样。稍后我会将内容添加到叠加层,我只需要解决那个 mouseLeave 事件问题。

const imageUrls = [
  'https://farm8.staticflickr.com/7909/33089338628_052e9e2149_z.jpg',
  'https://farm8.staticflickr.com/7894/46240285474_81642cbd37_z.jpg',
  'https://farm8.staticflickr.com/7840/32023738937_17d3cec52f_z.jpg',
  'https://farm8.staticflickr.com/7815/33089272548_fbd18ac39f_z.jpg',
  'https://farm5.staticflickr.com/4840/40000181463_6eab94e877_z.jpg',
  'https://farm8.staticflickr.com/7906/46912640552_4a7c36da63_z.jpg',
  'https://farm5.staticflickr.com/4897/46912634852_93440c416a_z.jpg',
  'https://farm5.staticflickr.com/4832/46964511231_6da8ef5ed0_z.jpg'
]

class Image extends React.Component {
  state = {hovering: false} 

  handleHover = () => {
    this.setState({hovering: true})
  }
  handleLeave = () => {
    this.setState({hovering: false})
  }

  render() {
    if (!this.state.hovering) {
      return (
        <div onMouseOver={this.handleHover}>
          <img src={this.props.url} alt='' />
        </div>
      )
    } else {
      return ( // works fine when using <div> tag instead of <a> or <span>
        <a href="#" style={{display: 'block'}} onMouseLeave={this.handleLeave}>
          <img style={{filter: 'opacity(20%)'}} src={this.props.url} alt='' />
        </a>  
      )
    }
  }
}

const Images = () => {
  return (
    <div className="gallery">  
      {imageUrls.map((image, i) => {
        return <Image key={i} url={image} />
      })}
    </div>
  )
}

ReactDOM.render(<Images />, document.getElementById('app'))

最佳答案

您可以使用纯 css 实现此目的,无需使用 Javascript。

a {
   display: block;
}

a:hover {
   filter: opacity(.2);
}

关于html - MouseLeave 事件未触发 anchor 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54798859/

相关文章:

html - 如何使用CSS使div背景图像中的div元素响应

c# - 无法使用 Javascript 折叠 div

javascript - Bootstrap 3 导航选项卡书签 url 不起作用

html - 嵌套 <nav> 上未显示背景图像

reactjs - 在 React-Redux 中转换 API 数据 : Action or Reducer

javascript - 有没有办法重构具有相似名称的变量?

html - CSS 左边使用 calc(percent +/- pixel) odd 结果

css - 如何访问本地安装的 NPM 包的 CSS

javascript - 如何使用 HTML/CSS 划分导航栏

reactjs - 如何过滤 react 中的状态数组?