有两个问题,我想不出解决办法。 示例:https://jsfiddle.net/uL3fktrh/
问题1. css中启用display:none of #a后,animate会失败。
问题 2. 我想每次进入 .bt 时都重新启动 animate,因此我编写了以下语法来删除并重新加载,但不再使用 animate。
$(".bt").mouseenter(function() {
$("#a").removeClass("cd-fade-in");
$("#a").addClass("cd-fade-in");
});
如果animate无法更改显示属性,我该怎么做才能获得相同的效果?
display
属性不可设置动画。但是
visibility
属性is,您可以通过设置
visibility: hidden;
而不是
display: none;
以类似的方式使用它
使用这种方法需要注意两件重要的事情:
visibility
属性的可用值是离散的,因此在对其进行动画处理时,值将在中间点发生变化。例如:
@keyframes becomeHidden {
0% { visibility: visible; }
100% { visibility: hidden; }
}
使用该动画,元素实际上会在 50% 标记处从 visible
切换到
hidden
。我通常克服这个问题的方法是通过这种方法:
@keyframes becomeHidden {
0% { visibility: visible; }
100% { visibility: visible; }
100% { visibility: hidden; }
}
这将强制元素在动画持续时间内保持可见,但在最后变得隐藏。
visibility: visible;
隐藏的元素仍然在标记中保留其空间。这是与
display: none;
的一个重要区别,后者也会从布局中删除元素。因此,如果您使用
visibility
隐藏某个元素,您可能还需要执行其他操作(例如使其使用
position: absolute;
或折叠其宽度或高度)以使其完全消失。
display
属性:
$(".bt").mouseenter(function() {
$("#a").fadeIn(500);
$("#a").css('display', 'visible')
});
$(".bt").mouseleave(function() {
$("#a").fadeOut(500);
$("#a").css('display', 'visible')
});
#a {
padding: 2em;
width: 10em;
height: 1em;
background: #333;
display: none;
}
.cd-fade-in {
animation: cd-fade-in-1 2s;
animation-fill-mode: forwards;
}
@keyframes cd-fade-in-1 {
0% {
display: block;
height: 1em;
}
100% {
display: block;
height: 10em;
}
}
/*-------------------*/
.bt{
width:4em;
background: blue;
margin-bottom:2em;
color:white;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="bt">碰觸我
</div>
<div id="a">
</div>
transition-behavior: allow-discrete
和
@starting-style
来实现此目的。今年已将其添加到CSS中,您可以查看文档
https://developer.mozilla.org/en-US/docs/Web/CSS/transition-behavior。
我还在我的简短博客文章中写了有关此功能和其他最近的 CSS 功能的文章,您可以在这里阅读:https://blog.meetbrackets.com/css-today-powerful-features-you-might-not-know-about -39adbbd5c65b
相反,您通常想要的动画是使用不透明度使元素淡入淡出,或者将高度/宽度动画化为 0,或者通过动画其位置将它们滑出视图,或者它们的组合。
动画完成后,您可以使用
display: none
删除元素。这只需要告诉浏览器它不需要尝试渲染该元素或其子元素。除非您有很多未显示的元素并且必须节省一些资源,否则您可能不需要实际尝试切换此属性。