我正在尝试编写一个动画,使.hint
div 悬停时消失。
这是我尝试过的现场演示。
但是,即使在最后添加了 a 之后,动画也会一次又一次地继续animation-iteration-count:1;
。Codepen 使用 prefixfree.js,所以我的代码中没有使用供应商前缀。
如何仅在 1 次迭代后停止动画?
编辑
当光标不在它上面时,我希望.hint
保持 opacity:0 。
我正在尝试编写一个动画,使.hint
div 悬停时消失。
这是我尝试过的现场演示。
但是,即使在最后添加了 a 之后,动画也会一次又一次地继续animation-iteration-count:1;
。Codepen 使用 prefixfree.js,所以我的代码中没有使用供应商前缀。
如何仅在 1 次迭代后停止动画?
当光标不在它上面时,我希望.hint
保持 opacity:0 。
您应该将动画的填充模式设置为forwards
. 这将使动画保持最后一个执行的状态,keyframe
即 ( opacity: 0;
)
animation-fill-mode: forwards;
如果您希望它在opacity: 0;
鼠标悬停后离开元素后仍保持不变,请添加一个如下所示的类并使用 jQueryopacity: 0;
将其附加到元素。onmouseleave
另外,请记住,在这种情况下您不能使用 CSS hover
,因为如果:hover
指定了规则,它将触发动画,即使opacity
是0
并且鼠标移动到元素所在的位置上也是如此。相反,你应该有一个class
ashover
并且只将它附加到元素上,就像我在下面使用 jQuery 显示的那样。
$(document).ready(function() {
$('.hint').on('mouseout', function() {
$('.hint').addClass('alreadyHovered');
});
$('.hint').on('mouseover', function() {
if (!($('.hint').hasClass('alreadyHovered'))) {
$('.hint').addClass('hover');
}
});
});
@-webkit-keyframes vanish {
from {
opacity: 1;
}
to {
opacity: 0;
}
}
@-moz-keyframes vanish {
from {
opacity: 1;
}
to {
opacity: 0;
}
}
@keyframes vanish {
from {
opacity: 1;
}
to {
opacity: 0;
}
}
.hint {
width: 20%;
background-color: #E51400;
position: fixed;
top: 10%;
right: 10px;
border-width: 2px;
padding: 1em;
color: white;
}
.hover {
-webkit-animation-name: vanish;
-moz-animation-name: vanish;
animation-name: vanish;
-webkit-animation-duration: 2s;
-moz-animation-duration: 2s;
animation-duration: 2s;
-webkit-animation-fill-mode: forwards;
-moz-animation-fill-mode: forwards;
animation-fill-mode: forwards;
-webkit-animation-iteration-count: 1;
-moz-animation-iteration-count: 1;
animation-iteration-count: 1;
}
.alreadyHovered {
opacity: 0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="hint">Hello</div>