js动画

作者: 清心挽风 | 来源:发表于2017-09-02 19:16 被阅读0次

    css动画:

    css动画的优点:

    • 代码量少:通过简单的属性配置,就可以实现各种动画效果;
    • 执行效率高:因为css代码是由gpu(显卡、M协处理器)进行渲染,所以不会占用CPU资源。

    缺点:

    • 兼容性问题:需要考虑用户群体的浏览器版本和类型,根据不同版本、类型配置不同的代码。
    • 不能像js那样精确地控制动画过程。

    js动画:

    s动画的优点

    • 可以精确的控制动画过程(通过js不断的修改标签属性实现动画效果)
    • 没有热河兼容性问题

    js动画的缺点:

    • 因为js操作标签属性时,其实是在进行DOM操作,修改DOM树,所以性能损耗较大。

    使用js让div块变速运动

    html代码:

    <script src="动画算子.js" type="text/javascript" charset="utf-8"></script>
    <div id="div" style="width: 300px;height: 300px;background-color: red;position: absolute;">
    
    </div>
    

    js代码:

    window.onload = function() {
                    var div = document.querySelector('#div');
                    var starTime, //记录动画开始时间
                        duration = 5 * 1000, //保存动画执行总时间
                        frameTime = 13,
                        timerId; //定时器id
    
                    div.onclick = function() {
                        starTime = new Date();
                        timerId = setInterval(animat, frameTime);
                    }
    
                    function animat() {
                        //获取动画执行的时间
                        var nowTime = new Date();
                        //获取动画执行时间百分比
                        var per = Math.min(1.0, (nowTime - starTime) / duration);
    
                        //通过时间百分比控制动画执行效果
                        //div.style.left = (500 * per) + 'px';
                        if(per == 1.0) {
                            clearInterval(timerId);
                        } else {
                            div.style.left = (Easing.backOut(per)) * 500 + 'px';
                        }
                    }
                }
    

    动画算子.js

     var pow = Math.pow,
         BACK_CONST = 1.70158;
    Easing = {
            // 匀速运动
            linear: function (t) {
                return t;
            },
    
            easeIn: function (t) {
                return t * t;
            },
    
            easeOut: function (t) {
                return (2 - t) * t;
            },
    
            easeBoth: function (t) {
                return (t *= 2) < 1 ? .5 * t * t : .5 * (1 - (--t) * (t - 2));
            },
    
            easeInStrong: function (t) {
                return t * t * t * t;
            },
    
            easeOutStrong: function (t) {
                return 1 - (--t) * t * t * t;
            },
    
            easeBothStrong: function (t) {
                return (t *= 2) < 1 ? .5 * t * t * t * t : .5 * (2 - (t -= 2) * t * t * t);
            },
    
            easeOutQuart: function (t) {
                return -(Math.pow((t - 1), 4) - 1)
            },
    
            easeInOutExpo: function (t) {
                if (t === 0) return 0;
                if (t === 1) return 1;
                if ((t /= 0.5) < 1) return 0.5 *Math.pow(2, 10 * (t - 1));
                return 0.5 * (-Math.pow(2, - 10 * --t) + 2);
            },
    
            easeOutExpo: function (t) {
                return (t === 1) ? 1 : -Math.pow(2, - 10 * t) + 1;
            },
            
            swingFrom: function (t) {
                return t * t * ((BACK_CONST + 1) * t - BACK_CONST);
            },
    
    
            swingTo: function (t) {
                return (t -= 1) * t * ((BACK_CONST + 1) * t + BACK_CONST) + 1;
            },
    
    
            backIn: function (t) {
                if (t === 1) t -= .001;
                return t * t * ((BACK_CONST + 1) * t - BACK_CONST);
            },
    
            backOut: function (t) {
                return (t -= 1) * t * ((BACK_CONST + 1) * t + BACK_CONST) + 1;
            },
    
            bounce: function (t) {
                var s = 7.5625,
                    r;
    
                if (t < (1 / 2.75)) {
                    r = s * t * t;
                } else if (t < (2 / 2.75)) {
                    r = s * (t -= (1.5 / 2.75)) * t + .75;
                } else if (t < (2.5 / 2.75)) {
                    r = s * (t -= (2.25 / 2.75)) * t + .9375;
                } else {
                    r = s * (t -= (2.625 / 2.75)) * t + .984375;
                }
    
                return r;
            }
        };
    

    相关文章

      网友评论

          本文标题:js动画

          本文链接:https://www.haomeiwen.com/subject/meqndxtx.html