javascript - css 子元素transition动画为什么无效?
大家讲道理
大家讲道理 2017-04-10 16:57:25
[JavaScript讨论组]

写了个模态窗口的飞入效果

<p id=mask>
     <p id=tips>提示</p>
</p>
#mask{
    display: none;
    width: 100%;
    height: 100%;
    z-index: 100;
    position: fixed;
    background-color: rgba(0, 0, 0, 0.8);
    text-align: center;
}
#tips{
    position: absolute;
    background-color: #0b93d5;
    width: 600px;
    height: 200px;
    text-align: center;
top: 50%;
    left: 50%;
    margin-left: -300px;
    margin-top: -100px;
font-size: 16px;
    opacity: 0;
    -webkit-transform:scale(3) ;
    -moz-transform: scale(3);
    -ms-transform: scale(3);
    -o-transform:scale(3) ;
    -webkit-transition: transform 0.8s ease-in,opacity 0.8s ease-in;
    -moz-transition: transform 0.8s ease-in,opacity 0.8s ease-in;
    -ms-transition: transform 0.8s ease-in,opacity 0.8s ease-in;
    -o-transition: transform 0.8s ease-in,opacity 0.8s ease-in;
    transition: transform 0.8s ease-in,opacity 0.8s ease-in;
}



 $("#test").click(function(){
        $("#mask").show();
        $("#tips").css({
            '-webkit-transform':'scale(1)',
            '-moz-transform': 'scale(1)',
            '-ms-transform': 'scale(1)',
            '-o-transform':'scale(1)',
            'opacity':1
        });
        
        

将隐藏的mask显示后,tips直接显示动画最后的状态,整个动画的过程跳过了,但是我把mask的display:none去掉,再点击测试,动画效果正常。我在改变css属性前已经把mask显示了,原理上跟我第二种测试方法应该没有任何区别。找不到原因。。谁来解释下。。

更新:
我把

$("#tips").css({
                '-webkit-transform':'scale(1)',
                '-moz-transform': 'scale(1)',
                '-ms-transform': 'scale(1)',
                '-o-transform':'scale(1)',
                'opacity':1
            });
            
    
    

setTimeout(function(){},0)包裹起来结果就没问题了。。还是不知道是什么原因

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(2)
巴扎黑

因为show和后面的animate都是修改style,其实是一次渲染的,所以不会有动画,解决方法是,show后面延迟一下,强制分成两次渲染,比如:

$(...).show();
setTimeout(function(){
  $(...).css(...);
})
黄舟

setTimeout在这里的作用是强制触发重绘,否则由于渲染引擎的优化,动画根本出不来。
另外,建议写成:

css:
.before {
这里写初始样式和transition
}
.before .after {
这里写之后的样式
}
然后在js里addClass就行了。当然,记得setTimeout
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号