sass / css - 移除 class 时反转动画
sass / css - reverse animation when a class is removed
我在 css / sass 中有以下设置:
@mixin animation ($stuff ) {
-webkit-animation: $stuff;
-moz-animation: $stuff;
-ms-animation: $stuff;
animation: $stuff;
}
@include keyframes (fadeIn) {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
@include keyframes (fadeOut) {
0% {
opacity: 1;
}
100% {
opacity: 0;
}
}
.element {
display: none;
opacity: 0;
@include animation(fadeIn .5s);
}
.element.active {
display: block;
opacity: 1;
}
这可以使不透明度变淡,但在 class 被移除时无法使不透明度变淡。我尝试添加 @include animation(fadeIn .5s);到 element.active 但这只会让两端的事情变得棘手。
有人知道如何完成这个吗?
为什么不简单地使用 transition
而不是 animation
?在 .element
上设置 opacity: 0
,在 .active
上设置 opacity: 1
,在 .element
上设置 transition: opacity .5s
。
关于移除时的显示部分,需要利用transitionend
事件,切换到display: none
才行。
此外,您不需要 -ms-animation
。 IE10 支持无前缀的动画和过渡,而 IE9 根本不支持它们。
var toggleButton = document.querySelector('button'),
elem = document.querySelector('.element');
toggleButton.addEventListener('click', function(){
if(!elem.classList.contains('display')) {
elem.classList.add('display');
}
setTimeout(function() {
elem.classList.toggle('alpha');
}, 150);
}, false);
elem.addEventListener('transitionend', function(){
if(!elem.classList.contains('alpha')) {
elem.classList.remove('display');
}
}, false);
.element {
display: none;
opacity: 0;
transition: opacity .5s
}
.alpha { opacity: 1; }
.display { display: block; }
<div class='element'>boo</div>
<button>toggle</button>
我在 css / sass 中有以下设置:
@mixin animation ($stuff ) {
-webkit-animation: $stuff;
-moz-animation: $stuff;
-ms-animation: $stuff;
animation: $stuff;
}
@include keyframes (fadeIn) {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
@include keyframes (fadeOut) {
0% {
opacity: 1;
}
100% {
opacity: 0;
}
}
.element {
display: none;
opacity: 0;
@include animation(fadeIn .5s);
}
.element.active {
display: block;
opacity: 1;
}
这可以使不透明度变淡,但在 class 被移除时无法使不透明度变淡。我尝试添加 @include animation(fadeIn .5s);到 element.active 但这只会让两端的事情变得棘手。
有人知道如何完成这个吗?
为什么不简单地使用 transition
而不是 animation
?在 .element
上设置 opacity: 0
,在 .active
上设置 opacity: 1
,在 .element
上设置 transition: opacity .5s
。
关于移除时的显示部分,需要利用transitionend
事件,切换到display: none
才行。
此外,您不需要 -ms-animation
。 IE10 支持无前缀的动画和过渡,而 IE9 根本不支持它们。
var toggleButton = document.querySelector('button'),
elem = document.querySelector('.element');
toggleButton.addEventListener('click', function(){
if(!elem.classList.contains('display')) {
elem.classList.add('display');
}
setTimeout(function() {
elem.classList.toggle('alpha');
}, 150);
}, false);
elem.addEventListener('transitionend', function(){
if(!elem.classList.contains('alpha')) {
elem.classList.remove('display');
}
}, false);
.element {
display: none;
opacity: 0;
transition: opacity .5s
}
.alpha { opacity: 1; }
.display { display: block; }
<div class='element'>boo</div>
<button>toggle</button>