zoukankan      html  css  js  c++  java
  • JS---封装缓动(变速)动画函数---增加多个任意多个属性

    封装缓动动画函数---增加多个任意多个属性

    在原来缓动动画函数,增加任意一个属性的基础上,做了如下改变

    1. 原来function animate(element, attr, target),三个变量,改为用json对象来装一对:属性:目标位置的值,变为function animate(element, json)

    2. 之前的变速动画函数,都任意一个属性,改变其当前属性的位置,到达目标属性。现在有多个任意属性,用json对象装,所以要遍历json对象里面每一个值 for(var key in json){}, key就是这里的attr, 所以遍历的for(var attr in json)

    3. 当前属性对应的目标值,var target就是json里面值的目标,var target=json[attr];

    4. 添加了flag的判断,是为了,保证在json中所有的值都到达目的位置后,再清除定时器

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
      <meta charset="UTF-8">
      <title>title</title>
      <style>
        * {
          margin: 0;
          padding: 0;
        }
    
        div {
          margin-top: 30px;
          width: 200px;
          height: 100px;
          background-color: green;
          position: absolute;
          left: 0;
          top: 0;
        }
      </style>
    </head>
    
    <body>
      <input type="button" value="移动到400px" id="btn1" />
      <div id="dv">
      </div>
      <script src="common.js"></script>
      <script>
        //点击按钮,改变宽度到达一个目标值
        //点击按钮,改变宽度到达一个目标值,高度到达一个目标值
    
        //获取任意一个元素的任意一个属性的当前的值
        function getStyle(element, attr) {
          return window.getComputedStyle ? window.getComputedStyle(element, null)[attr] : element.currentSytle[attr] || 0;
        }
    
        function animate(element, json) {
          clearInterval(element.timeId);
          element.timeId = setInterval(function () {
            var flag = true; //默认,假设,全部到达目标
            for (var attr in json) {
              //获取元素这个属性的当前的值
              var current = parseInt(getStyle(element, attr));
              //当前的属性对应的目标值
              var target = json[attr];
              //移动的步数
              var step = (target - current) / 10;
              step = step > 0 ? Math.ceil(step) : Math.floor(step);
              current += step;//移动后的值
              element.style[attr] = current + "px";
              if (current != target) {
                flag = false;
              }
            }
            if (flag) {
              clearInterval(element.timeId);
            }
            //测试代码
            console.log("目标:" + target + ",当前" + current + ",每次移动的步数" + step);
          }, 20)
        }
    
        my$("btn1").onclick = function () {
          animate(my$("dv"), { "width": 400, "height": 200, "left": 500, "top": 80 })
        };
    
      </script>
    </body>
    
    </html>

    效果如下:

  • 相关阅读:
    php 处理并发问题
    phpstudy 版本切换注意的问题
    php读取文件内容的三种方法
    防止重复提交表单的两种方法
    php 压缩函数gzencode gzdeflate gzcompress
    回调函数解析
    回调函数
    如何卸载红蜘蛛
    无法启动此程序,因为计算机中丢失MSVCR110.dll的解决方法
    mysql 去除重复 Select中DISTINCT关键字的用法
  • 原文地址:https://www.cnblogs.com/alannever/p/13535258.html
Copyright © 2011-2022 走看看