经验分享-网页动效之CSS篇

网页动效之CSS篇

在网页中实现动画效果有很多种方式,例如由js控制的canvas、svg、elements动画,还有由css3控制的svg和elements动画等(还有flash?)。css实现elements动画主要通过transition(过渡效果)和animation(动画)来控制。其中animation通过其强大的函数自定义化和丰富的控制接口以及css3与生俱来的流畅高速渲染效果,成为了动画大军的一只劲旅。

在制作一些简单的、动画元素少的、交互小的动画。css3的animation是最好的选择。
这篇文章的主题就是,用好animation的技巧。基础知识网上一大把就不说了。

Tips1:控制动画开始执行时刻

我们从例子出发,假如我们想要一个小球,在某个时刻(例如点击了一个按钮)向左动一下。这时我们就可以借助 animation-play-state 这个属性。

animation-play-state 属性规定动画正在运行还是暂停。

假设我们需要动画的元素为.ele,.ele的上级为.ele-wrap,那么我们可以这样写css:

.ele-wrap .ele{animation-play-state:paused;}

.playing .ele{animation-play-state:running;}

.ele{animation:moveToLeft 1s;}

当我们给ele-wrap 加上playing(例如通过点击事件添加)的时候,这个时候ele就会动起来。

通过这种方法,我们能更加方便清晰地控制某些区域下元素的动画开始执行时刻。

Tips2:叠加动画

animation 是支持叠加动画的写法的,看代码

.ele{animation:fadeIn 1s,sildeLeft 1s}

这个写法的意思是让元素渐显同时向左移动。

这里有一点要注意的是,如果后面的动画改变的元素属性和前面的动画一样的话,那么前面动画的属性改变就失效了。

.ele{animation:fadeIn 1s,sildeLeft 1s,sildeUp 1s}

如果是上面这种写法,那么sildeLeft将被忽略。

另外一种实现方法是采用元素嵌套。

通过给动画元素外包一个父级元素,然后给父级和子级分别加上动画。

.ele-wrap{animation:fadeIn 1s}

.ele-warp .ele{animation:slideLeft 1s}

Tips3:连接动画

通过animaiton的animation-delay可以实现动画连接。比如上个例子我们不要两个动画同时进行,我们想元素渐显后再向左移动,那么我们可以这样写:

.ele{animation:fadeIn 1s,sildeLeft 1s 1s}

sildeLeft后面的第一个1s是指动画执行时间,第二个1s是指动画延迟多久才执行。这样写元素就会延迟1s才向左边移动。

与Tips2一样,用元素嵌套方式可以连接数目更多的动画。

Tips4:规定动画执行位置

animation-delay允许负值,负值动画将马上开始,然后跳过动画的前N秒。比如我们希望ele直接就向左移动就可以这样写:

.ele{animation:fadeIn 1s -1s,sildeLeft 1s}

这样写fadeIn马上执行,而且是从原本执行1s后的状态开始执行。

Tips5:来回播放动画

animation-direction属性在某些情况很好用。比如你想让元素按照轨迹来回移动。按照常规方法你要这样写:

 @keyframes move{
     0%,100%{transform:translate(0,0);}
    25%{transform:translate(0,120px);}
     50%{transform:translate(120px,120px);}
    75%{transform:translate(0,120px);}
  }

.ele{animation:move 4s infinite}

如果用animation-direction ,只要这样

@keyframes move{
     0%{transform:translate(0,0);}
     50%{transform:translate(0,120px);}
    100%{transform:translate(120px,120px);}
 }

.ele{animation:move 4s infinite alternate}

当然了这只是简单的一个例子。

未完待续。。