CSS切换动画Transition应用到新创建dom不起作用

transition在新创建的dom上,无法立即生效,因为css会被合并计算,所以要看到动画效果,必须将切换css代码放入到setTimeout函数内,异步运行才可以。

示例代码:调用两个函数,分别创建顶部滑入、底部滑入动画,第一个不使用setTimeout、第二个使用setTimeout函数,可以明显看出差别。

html代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>创建dom元素,同时切换动画</title>
        <script type="text/javascript">
            window.onload = function(){
                create_top_animate();
                create_bottom_animate();
            };
        </script>
    </head>
    <body>
        
    </body>
</html>

下面是 css 代码:

.top, .bottom{
    background: #000; color: #FFF; position: fixed; z-index:100; 
    left: 0; width: 100%; height: 100px; line-height: 100px;
    text-align: center;
}

.top { top: -100px; transition: top .5s ease; }
.top-show { top: 0;}
.bottom {bottom: -100px; transition: bottom .5s ease; }
.bottom-show {bottom: 0; }

下面是切换js代码:

/** 
 * 第一个函数,创建顶部弹出动画,很明显,css被立即运算,合并了样式,
 * 所以transition 没起作用 
**/
function create_top_animate() {
     var dom = document.createElement(‘section‘);
    dom.className = ‘top‘;
    dom.innerHTML = ‘Create - Top - Animate Dom‘;
    document.body.appendChild(dom);
    dom.className += ‘ top-show‘;
}

/** 
 * 第二个函数,创建底部弹出动画,因为放入到setTimeout函数中,
 * 所以 dom.className += ... 这一行代码是异步运行,css无法立即合并,所以
 * 所以transition 才起作用 
**/
function create_bottom_animate() {
     var dom = document.createElement(‘article‘);
    dom.innerHTML = ‘Create - Bottom - Animate Dom With setTimeout‘;
    dom.className = ‘bottom‘;
    document.body.appendChild(dom);
    setTimeout(function(){
        dom.className += ‘ bottom-show‘;
    }, 10);
}

样例地址:  http://sandbox.runjs.cn/show/1t5qzuph

如果修改第一个函数,将 dom.className += ‘ top-show‘; 这一行代码放入到 setTimeout函数中,也可以实现动画切换效果。

还有别的解决办法:使用函数, window.getComputedStyle(dom).top; 立即计算CSS样式。不过还是setTimeout来的方便。

时间: 2024-10-08 02:56:16

CSS切换动画Transition应用到新创建dom不起作用的相关文章

css动画——transition和animation

http://www.ruanyifeng.com/blog/2014/02/css_transition_and_animation.html 第一部分:CSS Transition 在CSS 3引入Transition(过渡)这个概念之前,CSS是没有时间轴的.也就是说,所有的状态变化,都是即时完成. delay的真正意义在于,它指定了动画发生的顺序,使得多个不同的transition可以连在一起,形成复杂效果. transition的使用注意 (1)目前,各大浏览器(包括IE 10)都已经

如何使用JavaScript控制CSS Animations(动画)和Transitions(过渡)

Zach邮件跟我说,上Stack Overflow这类的论坛,他经常碰到一些关于JavaScript控制CSS 动画的问题,又提供给我几个例子.我很久就打算写一些关于这方面的文章,所以很高兴让Zach提出来并促使我写了这个教程. 有时候WEB开发人员认为CSS的动画比JavaScript的动画更难理解.虽然CSS动画有其局限性,但它的性能比大多数JavaScript库更加高效,因为它可以借助硬件加速啊!其效果绝对可以超出我们的预期. CSS animations和transitions再加上点J

css的动画和过渡

一.过渡: transition    简写属性,用于在一个属性中设置四个过渡属性. transition-property   规定应用过渡的 CSS 属性的名称. transition-duration    定义过渡效果花费的时间.默认是 0. transition-timing-function   规定过渡效果的时间曲线.默认是 "ease". transition-delay         规定过渡效果何时开始.默认是 0. eg: div { transition: w

第四十二课:基于CSS的动画引擎

由于低版本浏览器不支持css3 animation,因此我们需要根据浏览器来选择不同的动画引擎.如果浏览器支持css3 animation,那么就使用此动画引擎,如果不支持,就使用javascript的动画引擎. 首先,我们看一下判定条件,方便切换.前面说过,浏览器把所有事件类型的构造器放在window上,只不过不可遍历.我们用Object.getOwnPropertyNames(window),可以得到window对象中的所有属性,然后再filter一下,就能得到所有的事件构造器了.最后,我们

Swift:超炫的View Controller切换动画

匿名社交应用Secret的开发者开发了一款叫做Ping的应用,用户可以他们感兴趣的话题的推送. Ping有一个很炫的东西,就是主界面和之间切换的动画做的非常的好.每次看到一个非常炫的动画,都不由得会想:“这个东西我要不要自己实现以下”.哈哈~~~ 这个教程里,你会学到如何用Swift实现这样的很酷的动画.你会学到如何使用shape layer,遮罩和使用UIViewControllerAnimnatedTransitioning协议和UIPercentDrivenInteractivetrans

Web动画API教程1:创建基本动画

转载自http://www.w3cplus.com/css3/web-animations-api-tutorial-part-1-creating-a-basic-animation.html 我们已经初步了解了统一web动画API的内容,但是我们还没有真正去对规范的细节进行探讨,所以现在开始吧. WAAPI为你提供了比你用于CSS动画更多的控件,但是在了解它们之前,我们先打一下基础:如何使用这个API创建一个基本的动画? 创建一个关键帧动画 如果你对CSS Transition和animat

QtQuick多页面切换、多页面切换动画、多个qml文件数据交互

一.QtQuick多页面切换方法 (1)“隐藏法” 前一个视图visible设为false或者透明度opacity设为0,相当于“隐藏”了,实际还存在: 要显示的视图visible设为true或者透明度opacity设为1,显示出来: (2)“动态” var component = Qt.createComponent("Page1.qml").createObject(container,{width:100,heisght:100): 创建一个基于“Page1.qml”的组件,在组

iOS 自定义页面的切换动画与交互动画

在iOS7之前,开发者为了寻求自定义Navigation Controller的Push/Pop动画,只能受限于子类化一个UINavigationController,或是用自定义的动画去覆盖它.但是随着iOS7的到来,Apple针对开发者推出了新的工具,以更灵活地方式管理UIViewController切换. 自定义导航栏的Push/Pop动画 为了在基于UINavigationController下做自定义的动画切换,先建立一个简单的工程,这个工程的rootViewController是一个

css010 css的transform transition和animation

css010 css的transform transition和animation 看着没有一个能想起他们是干什么的.. 1.         Transform    Transform(变形) rotate(旋转) transform:rotate(10deg);      顺时针旋转10度   (deg角度的度量单位) scale(缩放) transform: scale (2);         scale(缩放)调整元素的尺寸 (2代表倍数) transform: scale (2,5