CSS3 - DOM删除过渡

Ste*_*eve 45 css dom css3 keyframe css-animations

使用关键帧,可以在元素插入DOM时立即对其进行动画处理.这是一些示例CSS:

@-moz-keyframes fadeIn {
    from {opacity:0;}
    to {opacity:1;}
}

@-webkit-keyframes fadeIn {
    from {opacity:0;}
    to {opacity:1;}
}

@keyframes fadeIn {
    from {opacity:0;}
    to {opacity:1;}
}

#box {
    -webkit-animation: fadeIn 500ms;
    -moz-animation: fadeIn 500ms;
    animation: fadeIn 500ms;
}
Run Code Online (Sandbox Code Playgroud)

是否有一些类似的功能可以在从DOM中删除之前将动画(通过CSS,没有JavaScript)应用于元素?下面是我用这个想法玩的jsFiddle; 如果您知道解决方案,请随意分叉.

jsFiddle - http://jsfiddle.net/skoshy/dLdFZ/

mer*_*tor 17

创建另一个名为的CSS动画fadeOut,比方说.然后,当您想要删除元素时,将元素上的animation属性更改为该新动画,并animationend在动画完成后使用该事件触发元素的实际删除:

$('.hide').click(function() {
    if (!$(this).hasClass('disabled')) {
        $('#fill').css('-webkit-animation', 'fadeOut 500ms');
        $('#fill').bind('webkitAnimationEnd',function(){
            $('#fill').remove();
            $('.show, .hide').toggleClass('disabled');
        });
    }
});
Run Code Online (Sandbox Code Playgroud)

另请参阅我的jsFiddle的更新版本.至少在Safari中这对我有用.

好吧,你应该使用一个类而不是那个.css().

我不认为jQuery对CSS动画有任何"真正的"支持,所以我认为你不能摆脱它webkitAnimationEnd.在Firefox中,它刚刚被调用animationend.

我很确定在CSS中没有办法做到这一点.

  • 但`.fadeOut()`使用JavaScript来制作动画.这实际上使用CSS作为动画.它只是使用JavaScript在合适的时间触发它.而且由于你无论如何都在使用JavaScript实际插入/删除元素,"仅CSS"是一种随意的.在删除CSS之前,没有办法触发CSS中的某些事情.如果你将那些"点击我"div转换为链接,你可以使用`.hide:active + #fill`作为选择器来触发淡出,但是你仍然需要一个`animationend`事件来实际当元素淡出时删除元素. (7认同)

Art*_*ith 6

我一直在研究javascript的组件库,我自己遇到了这个问题.我有幸能够在这个问题上投入大量的javascript,但是由于你已经使用了一些,请考虑以下内容以获得优雅降级的解决方案:

在删除任何组件/ dom节点时,添加一个名为"remove"的类.

然后在css中你可以使用该类定义你的动画:

.someElement.removing {
    -webkit-animation: fadeOut 500ms;
    -moz-animation: fadeOut 500ms;
    animation: fadeOut 500ms;
}
Run Code Online (Sandbox Code Playgroud)

回到javascript中,就在你添加'remove'类之后,你应该能够检查'animation'css属性,如果它存在,那么你知道你可以挂钩'animationEnd',如果它没有然后,立即删除元素.我记得一会儿测试它,它应该工作; 我会看看我是否可以挖掘示例代码.

更新: 我已经挖掘了这种技术,并开始为jQuery编写一个非常酷的插件,允许您对正在删除的DOM元素使用CSS3动画.无需额外的Javascript:http://www.github.com/arthur5005/jquery.motionnotion

这是非常实验性的,使用风险自负,但会喜欢一些帮助和反馈.:)