首頁  >  文章  >  web前端  >  javascript中多物體運動的實例程式碼

javascript中多物體運動的實例程式碼

不言
不言原創
2018-08-31 11:14:161342瀏覽

這篇文章帶給大家的內容是關於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>

相關推薦:

#javascript多物件運動實作方法分析_javascript技巧

JS實作多物體運動實例分享

以上是javascript中多物體運動的實例程式碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn