我试图触发鼠标悬停事件的CSS动画。不幸的是,它并没有像预期的那样工作。
这就是我所尝试的。我试图在mouseover上实现与CSS中的关键帧声明相同的运动。
它可以在Firefox +Chrome(移动的)中工作,但不能在Chrome(PC)中工作。
const element = document.querySelector('.circ');
element.addEventListener('mouseover', function() {
console.log(1);
element.style.animation = "move 1000ms infinite ease-in-out alternate";
});
element.addEventListener('mouseout', function() {
//mouseout triggers automatically following mouseover without provocation
console.log(2);
element.style.animation = "none";
});
.circ {
pointer-events: all;
}
.rect {
pointer-events: none;
}
@keyframes move {
0% {
transform: translateX(0);
}
100% {
transform: translateX(500px);
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="container" class="svg-container">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 100">
<rect x="0" y="0" width="530" height="200" fill="#EFEFEF"></rect>
<g class="crcl">
<circle class="circ" cx="10" cy="50" r="10" fill="blue"></circle>
</g>
</svg>
</div>
</body>
</html>
2条答案
按热度按时间qoefvg9y1#
动画实际上工作,但它不断重置自己。
问题是:将事件侦听器附加到动画圆圈。
当这个圆圈在鼠标悬停时开始移动时,它几乎会立即触发mouseout事件。
你可能应该在悬停svg或rect时开始和停止动画。
示例二:悬停时启动动画;点击停止
falq053o2#
通过覆盖与接收方
keyframe
元件完全相同的透明元件,可以利用现有的mouseover
和mouseout
实现期望的效果。然后在覆盖的元素上添加一个侦听器,以编程底部元素上的移动。等