我需要在一个遮罩动画中显示一个元素,为此我创建了两种不同的方法。但是,我不确定如何确定哪一种方法更有效。最终目标是使动画可用于移动设备,因此效率很重要。
方法一 - 在两个不同的div元素上使用transform:translate()。同时动画两个div元素以实现遮罩显示。
HTML
<div class="container">
<div class="content">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam eget auctor dui, ut maximus odio. Nam aliquam, ex eu posuere iaculis, erat eros tempus metus, gravida semper magna risus id elit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse placerat dolor sit amet risus pretium, quis semper augue scelerisque. Integer id luctus sapien. Aenean sodales lorem id mi elementum lacinia. Nam pretium risus sed ipsum molestie mattis. Curabitur et risus et ligula malesuada gravida vitae eget ex. Suspendisse augue quam, feugiat vel est vitae, euismod pretium lacus. Etiam vitae ultrices sapien, ac viverra lorem. Donec at sodales est, sed laoreet ante.
</div>
</div>
CSS
.container {
width: 300px;
height: 300px;
transform: translate(-100%,-100%);
-webkit-animation: reveal 5s forwards;
overflow: hidden;
}
.content {
width: 300px;
height: 300px;
transform: translate(100%,100%);
-webkit-animation: reveal 5s forwards;
background: red;
}
@-webkit-keyframes reveal {
100% { transform: translate(0,0) }
}
Fiddle: http://jsfiddle.net/murtw32u/
第二种方法 - 动画化父div的宽度和高度
HTML
<div class="container2">
<div class="content2">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam eget auctor dui, ut maximus odio. Nam aliquam, ex eu posuere iaculis, erat eros tempus metus, gravida semper magna risus id elit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse placerat dolor sit amet risus pretium, quis semper augue scelerisque. Integer id luctus sapien. Aenean sodales lorem id mi elementum lacinia. Nam pretium risus sed ipsum molestie mattis. Curabitur et risus et ligula malesuada gravida vitae eget ex. Suspendisse augue quam, feugiat vel est vitae, euismod pretium lacus. Etiam vitae ultrices sapien, ac viverra lorem. Donec at sodales est, sed laoreet ante.
</div>
</div>
CSS
.container2 {
width: 0;
height: 0;
-webkit-animation: reveal2 5s forwards;
overflow: hidden;
}
.content2 {
width: 300px;
height: 300px;
background: red;
}
@-webkit-keyframes reveal2 {
100% { width: 300px; height: 300px; }
}
Fiddle: http://jsfiddle.net/2d2w7j99/
这两种方法都能正常工作,但我想知道浏览器如何呈现它们。第一种方法可以动画化两个div,但只会动画化一个CSS属性(transform)。第二种方法可以动画化一个div,但会动画化两个CSS属性(width和height)。我不知道该如何确定哪种方式更快。
transform
被委派给了CPU,所以这是你最好的选择。虽然我也对此很感兴趣。 - somethinghere