动画 CSS 个关键帧回到初始状态
Animate CSS keyframes back to initial state
我查看了 SO 答案 (, , ),但仍然无法让我的动画正常工作。我有一个简单的关键帧,它最初可以很好地设置动画,但在切换 hidden class
时不会设置 back/forth 动画,它使用 animation-direction: reverse
将元素隐藏回关键帧的初始状态。
我想在单击显示按钮时将元素设置为 translateY(0%)
的动画,并在单击隐藏按钮时将元素设置为 translateY(-50%)
的动画,但 animation-timing-function: ease
没有正确应用因此没有动画。我还需要为此使用关键帧,因为我稍后会制作更复杂的转换动画。
这是我拥有的:
$('#show').on('click', function() {
$('#slide').removeClass('hidden');
});
$('#hide').on('click', function() {
$('#slide').addClass('hidden');
});
#slide {
background: #333;
color: #fff;
font-size: 14px;
font-weight: bold;
text-align: center;
width: 200px;
padding: 20px;
margin-bottom: 30px;
display: block;
animation-iteration-count: 1;
animation-direction: normal;
animation-duration: 0.4s;
animation-delay: 0s;
animation-timing-function: ease;
animation-fill-mode: both;
}
#slide.animation1 {
animation-name: slide;
}
#slide.hidden {
animation-direction: reverse;
}
@keyframes slide {
0% {
opacity: 0;
transform: translateY(-50%);
}
100% {
opacity: 1;
transform: translateY(0%);
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="slide" class="animation1">
<p>Lorem ipsum dolor sit amet, ius no feugiat vulputate, hendrerit quaerendum instructior ei eum. Fabellas percipitur definitionem ex vel.</p>
</div>
<button id="show">Show</button>
<button id="hide">Hide</button>
您不必为此使用 @keyframes
。您已经使用 jQuery 添加和删除 classes,因此您也可以使用 jQuery 添加一个 class onLoad 然后只使用 translateY
首先,您在默认状态下设置 translateY(-50%)
,在加载时添加 class animation1
并在 class 中添加 css,您设置translateY(0)
.
然后点击 hide
按钮添加 class hidden
(就像你现在做的那样),然后在 css 中添加 translateY(-50%)
.
这将实现你想要的
请参阅下面的代码片段,如果这就是您要查找的内容,请告诉我
$(window).on("load", function() {
$("#slide").addClass("animation1")
$('#show').on('click', function() {
$('#slide').removeClass('hidden');
});
$('#hide').on('click', function() {
$('#slide').addClass('hidden');
});
});
#slide {
background: #333;
color: #fff;
font-size: 14px;
font-weight: bold;
text-align: center;
width: 200px;
padding: 20px;
margin-bottom: 30px;
display: block;
transform: translateY(-50%);
transition: 0.3s;
}
#slide.animation1 {
transform: translateY(0%)
}
#slide.hidden {
transform: translateY(-50%)
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="slide" >
<p>Lorem ipsum dolor sit amet, ius no feugiat vulputate, hendrerit quaerendum instructior ei eum. Fabellas percipitur definitionem ex vel.</p>
</div>
<button id="show">Show</button>
<button id="hide">Hide</button>
为此您需要 2 个不同的动画。只是改变方向不会重新触发动画。
例如:
$('#show').on('click', function() {
$('#slide').removeClass('hidden');
});
$('#hide').on('click', function() {
$('#slide').addClass('hidden');
});
#slide {
background: #333;
color: #fff;
font-size: 14px;
font-weight: bold;
text-align: center;
width: 200px;
padding: 20px;
margin-bottom: 30px;
display: block;
animation-iteration-count: 1;
animation-direction: normal;
animation-duration: 0.4s;
animation-delay: 0s;
animation-timing-function: ease;
animation-fill-mode: both;
opacity: 0;
transform: translateY(-50%);
}
.animation1 {
animation-name: slide;
}
#slide.hidden {
animation-name: slide2;
}
@keyframes slide {
to {
opacity: 1;
transform: translateY(0%);
}
}
@keyframes slide2 {
from {
opacity: 1;
transform: translateY(0%);
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="slide" class="animation1">
<p>Lorem ipsum dolor sit amet, ius no feugiat vulputate, hendrerit quaerendum instructior ei eum. Fabellas percipitur definitionem ex vel.</p>
</div>
<button id="show">Show</button>
<button id="hide">Hide</button>
我查看了 SO 答案 (hidden class
时不会设置 back/forth 动画,它使用 animation-direction: reverse
将元素隐藏回关键帧的初始状态。
我想在单击显示按钮时将元素设置为 translateY(0%)
的动画,并在单击隐藏按钮时将元素设置为 translateY(-50%)
的动画,但 animation-timing-function: ease
没有正确应用因此没有动画。我还需要为此使用关键帧,因为我稍后会制作更复杂的转换动画。
这是我拥有的:
$('#show').on('click', function() {
$('#slide').removeClass('hidden');
});
$('#hide').on('click', function() {
$('#slide').addClass('hidden');
});
#slide {
background: #333;
color: #fff;
font-size: 14px;
font-weight: bold;
text-align: center;
width: 200px;
padding: 20px;
margin-bottom: 30px;
display: block;
animation-iteration-count: 1;
animation-direction: normal;
animation-duration: 0.4s;
animation-delay: 0s;
animation-timing-function: ease;
animation-fill-mode: both;
}
#slide.animation1 {
animation-name: slide;
}
#slide.hidden {
animation-direction: reverse;
}
@keyframes slide {
0% {
opacity: 0;
transform: translateY(-50%);
}
100% {
opacity: 1;
transform: translateY(0%);
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="slide" class="animation1">
<p>Lorem ipsum dolor sit amet, ius no feugiat vulputate, hendrerit quaerendum instructior ei eum. Fabellas percipitur definitionem ex vel.</p>
</div>
<button id="show">Show</button>
<button id="hide">Hide</button>
您不必为此使用 @keyframes
。您已经使用 jQuery 添加和删除 classes,因此您也可以使用 jQuery 添加一个 class onLoad 然后只使用 translateY
首先,您在默认状态下设置 translateY(-50%)
,在加载时添加 class animation1
并在 class 中添加 css,您设置translateY(0)
.
然后点击 hide
按钮添加 class hidden
(就像你现在做的那样),然后在 css 中添加 translateY(-50%)
.
这将实现你想要的
请参阅下面的代码片段,如果这就是您要查找的内容,请告诉我
$(window).on("load", function() {
$("#slide").addClass("animation1")
$('#show').on('click', function() {
$('#slide').removeClass('hidden');
});
$('#hide').on('click', function() {
$('#slide').addClass('hidden');
});
});
#slide {
background: #333;
color: #fff;
font-size: 14px;
font-weight: bold;
text-align: center;
width: 200px;
padding: 20px;
margin-bottom: 30px;
display: block;
transform: translateY(-50%);
transition: 0.3s;
}
#slide.animation1 {
transform: translateY(0%)
}
#slide.hidden {
transform: translateY(-50%)
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="slide" >
<p>Lorem ipsum dolor sit amet, ius no feugiat vulputate, hendrerit quaerendum instructior ei eum. Fabellas percipitur definitionem ex vel.</p>
</div>
<button id="show">Show</button>
<button id="hide">Hide</button>
为此您需要 2 个不同的动画。只是改变方向不会重新触发动画。
例如:
$('#show').on('click', function() {
$('#slide').removeClass('hidden');
});
$('#hide').on('click', function() {
$('#slide').addClass('hidden');
});
#slide {
background: #333;
color: #fff;
font-size: 14px;
font-weight: bold;
text-align: center;
width: 200px;
padding: 20px;
margin-bottom: 30px;
display: block;
animation-iteration-count: 1;
animation-direction: normal;
animation-duration: 0.4s;
animation-delay: 0s;
animation-timing-function: ease;
animation-fill-mode: both;
opacity: 0;
transform: translateY(-50%);
}
.animation1 {
animation-name: slide;
}
#slide.hidden {
animation-name: slide2;
}
@keyframes slide {
to {
opacity: 1;
transform: translateY(0%);
}
}
@keyframes slide2 {
from {
opacity: 1;
transform: translateY(0%);
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="slide" class="animation1">
<p>Lorem ipsum dolor sit amet, ius no feugiat vulputate, hendrerit quaerendum instructior ei eum. Fabellas percipitur definitionem ex vel.</p>
</div>
<button id="show">Show</button>
<button id="hide">Hide</button>