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来的方便。

转载于:https://my.oschina.net/jsk/blog/496843

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
是的,Vue 中的 `transition` 组件可以用来创建动画效果,通过在元素的进入、离开或同时进行时应用不同的 CSS 类,从而实现过渡动画效果。 `transition` 组件可以在元素进入或离开时触发以下四个 CSS 类: - 进入过渡动画: - `v-enter`: 进入过渡动画的开始状态,此时元素还没有插入到 DOM 中。 - `v-enter-active`: 进入过渡动画的过程状态,此时可以通过设置 CSS 过渡或动画来实现动画效果。 - `v-enter-to`: 进入过渡动画的结束状态,此时元素已经插入到 DOM 中。 - 离开过渡动画: - `v-leave`: 离开过渡动画的开始状态,此时元素还没有从 DOM 中移除。 - `v-leave-active`: 离开过渡动画的过程状态,此时可以通过设置 CSS 过渡或动画来实现动画效果。 - `v-leave-to`: 离开过渡动画的结束状态,此时元素已经从 DOM 中移除。 下面是一个简单的示例,用于说明 `transition` 组件的用法: ```html <template> <div> <button @click="show = !show">Toggle</button> <transition name="fade"> <p v-if="show">Hello World!</p> </transition> </div> </template> <script> export default { data() { return { show: false } } } </script> <style> .fade-enter-active, .fade-leave-active { transition: opacity 0.5s; } .fade-enter, .fade-leave-to { opacity: 0; } </style> ``` 在上面的代码中,我们使用 `transition` 组件包裹一个 `p` 元素,并在 `p` 元素上使用 `v-if` 指令来控制其显示或隐藏。然后,我们通过点击按钮来切换 `show` 变量的值,从而触发 `transition` 组件的进入或离开过渡动画。 在样式中,我们定义了 `fade-enter-active` 和 `fade-leave-active` 类来设置过渡动画的过程状态,定义了 `fade-enter` 和 `fade-leave-to` 类来设置过渡动画的开始和结束状态。在这个示例中,我们使用了 `opacity` 属性来实现淡入淡出的动画效果。 需要注意的是,为了让 `transition` 组件正常工作,我们还需要定义一个过渡名称,可以通过 `name` 属性来设置。在上面的示例中,我们将过渡名称设置为 `fade`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值