zoukankan      html  css  js  c++  java
  • 缓存动画4-回调

     1  <script>
     2        window.addEventListener('load', function (ev) {
     3            var box = myTool.$('box');
     4 
     5            myTool.$('btn').addEventListener('click', function () {
     6                buffer(box, { 'left': 900, 'top': 500, 'width': 600, 'height': 400}, function () {
     7                    buffer(box, { 'left': 100, 'top': 100, 'width': 50, 'height': 50}, function () {
     8                        buffer(box, { 'left': 600, 'top': 500, 'width': 300, 'height': 400}, null)
     9                    });
    10                });
    11            });
    12        });
    13 
    14        /**
    15         *  缓动动画函数
    16         * @param {Object}eleObj
    17         * @param {Object}json
    18         * @param {Function}fn
    19         */
    20        function buffer(eleObj, json, fn) {
    21            // 1.1 先清后设
    22            clearInterval(eleObj.timer);
    23 
    24            // 1.2 定义变量
    25            var speed = 0, begin = 0, target = 0, flag = false;
    26 
    27            // 1.3 设置定时器
    28            eleObj.timer = setInterval(function () {
    29                // 标志 (标签的所有属性有没有执行完动画)
    30                flag = true;
    31                for(var key in json){
    32                    // 获取要做动画属性的初始值
    33                    begin = parseInt(myTool.getStyleAttr(eleObj, key)) || 0;
    34                    target = parseInt(json[key]);
    35                    console.log('begin:' + begin);
    36 
    37                    // 2.3 求出步长
    38                    speed = (target - begin) * 0.2;
    39                    speed = (target > begin) ? Math.ceil(speed) : Math.floor(speed);
    40 
    41                    // 2.4  动起来
    42                    eleObj.style[key] = begin + speed + 'px';
    43 
    44                    // 2.5 判断
    45                    if (begin !== target) {
    46                        flag = false;
    47                    }
    48                }
    49 
    50                // 1.4 清除定时器
    51                if(flag){
    52                    clearInterval(eleObj.timer);   //解决了只要一个值满足就可以的情况
    53                    // 开启另一组动画
    54                   /* if(fn){
    55                        fn();
    56                    }*/
    57                   fn && fn();
    58                }
    59            }, 40);
    60        }
    61    </script>
  • 相关阅读:
    redis实现电商购物车
    redis应用于各种结构型和非结构型高热度数据访问加速
    Redis控制热点新闻的实效性
    Redis实现分表操作id唯一
    KrakenD网关V1.0.0文档初步翻译
    CentOS7环境下安装Chrome
    七夕秀恩爱新姿势!这波操作我给十分!
    小程序&#183;云开发实战
    小程序&#183;云开发实战
    小程序云开发实战
  • 原文地址:https://www.cnblogs.com/zhangzhengyang/p/11217280.html
Copyright © 2011-2022 走看看