2009年2月27日

移動的區塊

這個練習是要將兩個子區塊不停的移動,但是不會超出父區塊的範圍。這個練習用到以下特徵與方法。

  1. DIV:用來定義父區塊與子區塊,子區塊中可以放文字或圖片。
  2. position:可以定義區塊佈局的方式。父區塊必須設成 relative,子區塊則設成 absolute。
  3. getElementById():利用識別名取得元素的物件。
  4. getElementsByTagName():利用標籤名取得元素物件的清單。使用時要注意 IE 沒有 getElementsByClassName() 這個方法。
  5. style 物件:元素的風格物件,利用此物件讀取或設定子區塊的 top, left 就能移動子區塊。
  6. clientHeight, clientWidth:取得父區塊的寬與高。
  7. setTimeout():設定變化的時間間隔。
  8. setBall():此函式會設定 ball 類別區塊的開始位置。
  9. moveBall():此函式會移動 ball 類別區塊。
  • 程式用法:

    <style type='text/css'>
    #board  {position:relative;
             width:300px;
             height:300px;
             background:#339;
            }
    #board .ball
            {position:absolute;
             width:24px;
             height:24px;
             background:white;
             color:red;
            }
    </style>
    <div id=board>
    <div class=ball>B</div>
    <div class=ball>
    <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqDFS_lYt9n3mbIJu2gbYu2bZXspHAZUiTPq7sMN3abjxNP5tgQJ3lvamcEExZat-tqvDaPHwV_ZvSts9x9ctDigzxPikj_ZtPGuZaMSy8_ohD-6LagHTrmoxA6EinHSM9O7ILXhjs1szm/s200/ant.GIF">
    </div>
    </div>

    <script type='text/javascript'>
    var balls=[[2,2],[2,2]];
    function moveBall(id)
    {
      var o=document.getElementById(id);
      var w=parseInt(o.clientWidth)-24;
      var h=parseInt(o.clientHeight)-24;
      for(var i=0; i < balls.length; i++)
      {var bo=balls[i][2];
       var px=parseInt(bo.left);
       var py=parseInt(bo.top);
       px+=balls[i][0];
       if(px > w || px < 0) balls[i][0]=-balls[i][0];
       py+=balls[i][1];
       if(py > h || py < 0) balls[i][1]=-balls[i][1];
       bo.top=py+'px';
       bo.left=px+'px';
      }
      setTimeout('moveBall("'+id+'")', 20);
    }
    function setBall(id)
    {
      var bs=document.getElementById(id).getElementsByTagName('div');
      var bo=bs[0].style;
      balls[0][2]=bo;
      bo.top='10px';
      bo.left='100px';

      bo=bs[1].style;
      balls[1][2]=bo;
      bo.top='200px';
      bo.left='10px';
    }
    setBall("board");
    moveBall("board");
    </script>

  • 執行結果:

    B

©2008-2009 by ant2legs, All Rights Reserved. ant2legs 擁有其製作的文章,圖片與程式的著作權,所有權利保留。