用js封装一个多物体运动框架,可用于轮播图功能中。详解!

话不多说,我们就开始自己动手封装一个带有缓冲运动的多物体运动框架吧。该框架具有强大的功能,用一个函数,就可实现js中物体的运动,透明度,宽高度的改变。并可用于图片轮播播放器中。

为了简化大家看代码的阅读时间,我把主要的函数功能逻辑用文字讲解一遍。

  • getStyle(obj,name)函数
    getStyle(obj, name)函数是为了去获取当前元素所使用的css值,如div标签元素中的height和width的值。
    obj和name为形参,obj为物体的标签元素,name为当前标签元素的css值。//例:obj:div元素;name:div元素的css属性名称。
    为了兼容IE这个神奇的浏览器,我们需要用到currentStyle()方法来获取标签元素的css属性。

  • remove()函数,是整个多物体运动框架的核心。
    remove(obj, attr, iTarget)函数中有3个参数,obj为标签元素,attr为标签元素的css属性,iTarget为物体运动的目标值。

  • 在运动开始之前,需要把定时器先关闭清理一次,这样做是为了避免出现多个定时器同时进行的情况。clearInterval(obj.timer); //先停掉定时器

  • 设置定时器,在定时器内包裹一个函数,所有的功能在这个函数体内完成。

  • 设置物体自身的初值 curr,设置初值的原因的计算物体的运动速度。

  • 因为在不同的浏览器中,物体的透明度opacity是个比较特殊是属性,为了能让不同的浏览器能兼容显示,需要进行特殊的判断curr =Math.round(parseFloat(getStyle(obj, attr)) * 100)

  • 接下来是计算物体的运动速度:var speed = (iTarget - curr) / 6;用iTarget目标值-curr物体当前位置,再除以一个值,用以调整物体运动速度的快慢。
    并对物体运动速度的正负值进行三目运算判断。

  • 最后一步,物体最终要移动的数值,用速度+当前自身数值来计算。速度和自身数值是随着运动不断动态变化中的,(speed + curr)。

  • 下面贴上一个图片例子和详细的代码。

物体运动前物体运动之后

  • 详细代码,一定要先看上面的解析哦。
function getStyle(obj, name) {
  //例:obj:div元素;name:div元素的css属性名称
  //currentStyle和getComputedStyle:获取当前元素所使用的css属性值
  if (obj.currentStyle) {
    //IE浏览器
    return obj.currentStyle[name];
  } else {
    return getComputedStyle(obj, false)[name]; //Chrome浏览器
  }
}

var timer = null;

function remove(obj, attr, iTarget) {
  //obj:(html如:div) attr:obj的css属性, iTarget:目标值

  clearInterval(obj.timer); //先停掉定时器

  obj.timer = setInterval(() => {
    var curr = 0; //物体自身高度
    if (attr == "opacity") {
      curr = Math.round(parseFloat(getStyle(obj, attr)) * 100);
      //parseFloat为适应透明度
    } else {
      curr = parseInt(getStyle(obj, attr));
      //移动的宽,高度等,相当于offsetHight
    }

    var speed = (iTarget - curr) / 6; //物体移动速度

    speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
    //Math.ceil():向上取整,取最大的;Math.floor():向下取整,取最小的

    if (curr == iTarget) {
      clearInterval(obj.timer);
    } else {
      if (attr == "opacity") {
        //为适应透明度
        obj.style.filter = "alpha(opacity:" + (speed + curr) + ")";
        obj.style.opacity = (curr + speed) / 100;
      } else {
        obj.style[attr] = curr + speed + "px";
      }
    }
  }, 30);
}

  • 上面图片中的html代码,在html中引用的remove.js这个多物体运动框架。
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>多物体运动框架</title>
    <script src="remove.js"></script>
  </head>
  <body>
    <button onclick="sport()">点击运动</button>
    <div class="speed" id="play"></div>
  </body>

  <script>
    var play = document.getElementById("play");
    function sport() {
      remove(play, "left", 200);
      play.onmousemove = function() {
        remove(play, "opacity", 100);
      };
    }
  </script>
  <style>
    .speed {
      width: 100px;
      height: 100px;
      background: red;
      margin: 20px;
      position: absolute;
      left: 0;
      opacity: 0.6;
    }
  </style>
</html>

                              ~~*完结,觉得文章对你有帮助或者写的还不错,记得关注点赞评论哟*~~ 
发布了3 篇原创文章 · 获赞 8 · 访问量 299

猜你喜欢

转载自blog.csdn.net/CHENJIANCONG66/article/details/104479316
今日推荐