js网页动画实现的一些心得

工作中经常会需要做一些网页动画效果,偷懒的话当然可以使用jquery的animate函数,但是很多时候还是会想自己去研究一下动画的实现。

动画的基本原理就是随着时间的推移改变画面的内容,其中主要会用到两个概念:关键帧和缓动——用计算机来实现的动画基本上都是这样,从一个关键帧经过一定的间隔变为另一个关键帧,而中间的过程则通过缓动函数来表现。

下面说说具体实现,用js实现动画的话,主要会用到setInterval和Date.now(或者new Date().getTime),setInterval定时执行间隔函数,而Date.now则主要用来校准时间,因为setInterval的实际执行间隔并不能保证精确地等于设定的执行间隔,所以需要在开始动画之前记录开始时间,每次执行间隔函数的时候重新获取Date.now并与开始时间进行比对,以确认精确的时间进度,当发现时间进度大于或等于动画时长时则终止动画进程。

缓动函数,网上可以找到很多(最流行的就是Robert Penner大神的作品),可以直接拿来使用。不过我这里简单提一下缓动函数的实现原理,了解这个原理的话,自己也可以写一些有趣的效果。缓动函数不管接收多少个参数,最终的目的都是一样的,就是把线性0到1的数值,按照算法转换成另一套数值,而转换的结果可以大于1或小于0,但是要遵循一点,就是输入0必须返回0,输入1必须返回1。

w3ctech微信

扫码关注w3ctech微信公众号

共收到3条回复

  • 赞,不过怎么分类是意见和建议呢?

    回复此楼
  • 改了......

    回复此楼
  • 现在不是都已经这样写了吗?

    window.requestAFrame = (function () {
     return window.requestAnimationFrame ||
     window.webkitRequestAnimationFrame ||
     window.mozRequestAnimationFrame ||
     window.oRequestAnimationFrame ||
     // if all else fails, use setTimeout
     function (callback) {
     return window.setTimeout(callback, 1000 / 60); // shoot for 60 fps
     };
    })();
    window.cancelAFrame = (function () {
     return window.cancelAnimationFrame ||
     window.webkitCancelAnimationFrame ||
     window.mozCancelAnimationFrame ||
     window.oCancelAnimationFrame ||
     function (id) {
     window.clearTimeout(id);
     };
    })();
    
    回复此楼

AltStyle によって変換されたページ (->オリジナル) /