只有Safari才能在拖动时触发CSS悬停事件

问题描述 投票:1回答:1

Safari使用css注册悬停事件似乎有问题。如果您运行下面的代码段并将光标从蓝色拖动到绿色,则应该发生两件事。在所有浏览器上,绿色div将在悬停时变为红色。在非Safari浏览器(firefox和chrome,两者都是最新的)上,当从蓝色拖动到绿色时,绿色div将在光标进入时变为红色。在Safari(也是最新版本)上,当光标从蓝色div拖动到绿色div时,绿色div不会变为红色。当鼠标已经关闭时识别悬停似乎是一个问题。我尝试了许多不同的变体和其他解决方案,但它们不起作用(设置其他css属性以使其重绘等)。任何人都可以解释这种奇怪的行为以及如何解决/修复它?

div {
  position: fixed;
  color: white;
  -webkit-user-select: none;
  user-select: none;
}
div.blue {
  top: 0;
  left: 0;
  width: 50%;
  height: 100%;
  background-color: blue;
}
div.green {
  top: 0;
  left: 50%;
  width: 50%;
  height: 100%;
  background-color: green;
}
.green:hover {
  background-color: red !important;
}
<div class="blue">CLICK HERE</div>
<div class="green">AND DRAG HERE</div>
css safari hover mousedown onmousedown
1个回答
1
投票

经过更多搜索我发现我必须使用javascript鼠标输入和鼠标离开事件来改变颜色。 Safari悬停似乎是有目的地使得无法识别悬停时的拖拽。

document.getElementsByTagName('div')[1].onmouseenter = () => {
  document.getElementsByTagName('div')[1].classList.add('hover')
}

document.getElementsByTagName('div')[1].onmouseleave = () => {
  document.getElementsByTagName('div')[1].classList.remove('hover')
}
div {
  position: fixed;
  color: white;
  -webkit-user-select: none;
  user-select: none;
}
div.blue {
  top: 0;
  left: 0;
  width: 50%;
  height: 100%;
  background-color: blue;
}
div.green {
  top: 0;
  left: 50%;
  width: 50%;
  height: 100%;
  background-color: green;
}
.green:hover, .green.hover {
  background-color: red !important;
}
<div class="blue">CLICK HERE</div>
<div class="green">AND DRAG HERE</div>
© www.soinside.com 2019 - 2024. All rights reserved.