javascript 多物体活动

前面我们都是用定时器完成单物体活动,在项目中我们每每不是做单物体活动,而是做多物体多个值变化。
这里我们将经由过程转变参数完成多物体、恣意值的活动。一个活动框架,能够转变物体的宽度、高度、边框、字体大小、透明度等等。

注重:上面章节中,我们都是用offsetWidth(offsetWidth包括边框和padding等)等设置、猎取款式,由于运用体式格局简朴,然则假如物体包括border和padding等款式的时刻,就会报错,所以这里我们用越发严谨的体式格局currentStyle和getComputedStyle来猎取款式。
注重:在电脑中我们并不能真正的存储一些详细的数值,我们存储的是一些近似值,比方0.07*100,终究效果并非7,所以在下面我们会四舍五入转换为整数。
注重注重:在多物体活动时,定时器和一些参数肯定不要共用,不然会到这这个活动没有完成就被消灭然后触发了其他活动,一些参数也不能够共用,会致使一些参数没有到达固定值就被从新操纵。所以,下例中的定时器都是放在元素上。

下面是我们做的一个例子

<!DOCTYPE html>
<html>

<head>
  <title>活动转变宽度、高度、边框、字体、透明度</title>
  <style>
    div {
      width: 200px;
      height: 200px;
      background: red;
      margin: 10px;
      float: left;
      border:1px solid #000;
      font-size:14px;
    }
    div:nth-child(5) {
      filter: alpha(opacity:30);
      opacity:0.3;
    }
  </style>
  <script>
    window.onload = function() {
      var oDiv1 = document.getElementById("div1");
      var oDiv2 = document.getElementById("div2");
      var oDiv3 = document.getElementById("div3");
      var oDiv4 = document.getElementById("div4");
      var oDiv5 = document.getElementById("div5");
      oDiv1.onmouseover=function(){
        startMove(this,"height", 400)
      }
      oDiv1.onmouseout=function(){
        startMove(this,"height", 200)
      }
      oDiv2.onmouseover=function(){
        startMove(this,"width", 400)
      }
      oDiv2.onmouseout=function(){
        startMove(this, "width",200)
      }
      oDiv3.onmouseover=function(){
        startMove(this,"fontSize", 50)
      }
      oDiv3.onmouseout=function(){
        startMove(this, "fontSize",14)
      }

      oDiv4.onmouseover=function(){
        startMove(this,"borderWidth", 100)
      }
      oDiv4.onmouseout=function(){
        startMove(this, "borderWidth",1)
      }
      oDiv5.onmouseover=function(){
        startMove(this,"opacity", 100)
      }
      oDiv5.onmouseout=function(){
        startMove(this, "opacity",30)
      }
    }

    function getStyle(obj,name){
      if(obj.currentStyle){
        return obj.currentStyle[name];
      }
      else{
        return getComputedStyle(obj,false)[name];
      }
    }

    function startMove(obj, attr, iTarget) {
      clearInterval(obj.timer);
      obj.timer = setInterval(function() {
        var cur=0;
        if(attr==="opacity"){
          cur=Math.round(parseFloat(getStyle(obj,attr))*100);//有可能会涌现偏差0.07*100
        }
        else{
          cur=parseInt(getStyle(obj,attr));
        }
        var speed = (iTarget - cur) / 6;
        speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
        if (cur === iTarget) {
          clearInterval(obj.timer);
        } else {
          if(attr==="opacity"){
            obj.style.filter="alpha(opacity:"+cur+speed+")";
            obj.style.opacity=(cur+speed)/100;
          }else{
            obj.style[attr]=cur+speed+"px";
          }
        }
      }, 30)
    }
  </script>
</head>

<body>
  <div id="div1">变宽</div>
  <div id="div2">变高</div>
  <div id="div3">笔墨变大</div>
  <div id="div4">borderwidth</div>
  <div id="div5">透明度</div>
</body>

</html>
    原文作者:666888
    原文地址: https://segmentfault.com/a/1190000016211648
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞