5

ここに来るのは初めてで、これをインデントする方法がわかりません:/

バンの画像があり、それが運転しているかのように画面上で移動しようとしています。それが完了したら、イメージが離れていくように (そして小さくなっていくように) 表示するようにイメージをスケーリングします。

これは、パッケージ (JQuery など) を使用せずに標準の JavaScript で行う必要があります。

私が持っているのは、故障できない理由で 1 つではなく 2 つのパスに沿って移動しているバンです。また、間違った方向に移動します (パス y=-25x に沿って移動し、右に 25 ピクセル移動するごとに 1 ピクセル上に移動する必要があります)。

私が達成しようとしていることを説明するには、次の画像を参照してください: http://i.stack.imgur.com/9WIfr.jpg

これは私のjavascriptファイルです:

var viewWidth = 800;        
var viewHeight = 480;        
var fps = 30;        
var delay = getFrame(fps);        
var vanWidth, vanHeight, vanObj;   

function initVan() {        
  vanObj = document.getElementById("van");        
  vanObj.style.position = "absolute";        
  vanObj.src = "pics/delivery/van.png";        
  vanWidth = 413;        
  vanHeight = 241;        
  var startX = 0-vanWidth;        
  var startY = viewHeight-vanHeight;        
  setPosition(startX,startY);        
  transition(startX,startY,3000);        
}

function transition(startX,startY,time) {        
  //the intention of this is to follow a path y=-25x in mathematical terms
  var endX = viewWidth;        
  var endY = startY-(endX/-25);        
  //note that this is the velocity per millisecond
  var velocityX = (endX-startX)/time;        
  var velocityY = (endY-startY)/time;        
  alert(endY+", "+startY);        
  move(velocityX,velocityY,endX,endY);        
}

function move(vX,vY,eX,eY) {        
  var posX = getX();        
  var posY = getY();        
  if (posX<=eX || posY<=eY) {        
    //velocityX (in milliseconds) * delay = the amount of pixels moved in one frame @fps=30
    var moveX = vX*delay;        
    var moveY = vY*delay;        
    var newX = posX+moveX;        
    var newY = posY+moveY;        
    setPosition(newX,newY);        
    setTimeout(function() {        
        move(vX,vY,eX,eY);        
    }, delay);        
  }        
} 


function getX() {        
  return vanObj.offsetLeft;        
}    

function getY() {        
  return vanObj.offsetTop;        
}  

function setPosition(newX,newY) {        
  vanObj.style.left = newY + "px";        
  vanObj.style.top = newX + "px";        
}        

function setSize(scaleX,scaleY) {        
  vanWidth *= scaleX;        
  vanHeight *= scaleY;        
  vanObj.width = vanWidth;        
  vanObj.height = vanHeight;        
}      

function getFrame(fps) {        
  return Math.floor(1000/fps);        
}  

これは私のHTMLファイルです:

<script type="text/javascript" src="delivery.js"> </script>
<body onLoad="initVan();">
<img id="van" width=413 height=241/>

4

2 に答える 2

5

ライブラリの要件がない場合、または車輪の再発明を特に楽しんでいる場合を除き、jQuery の効果ライブラリ、特に .animate: http://api.jquery.com/animate/を使用してこれを解決します。そのページの最初の例を参照してください。

$(document).ready(function() {
  $('#van')
    .attr({
      width: 413,
      height: 241  //etc.
    })
    .animate({
      width: "70%",
      height: "70%"  //etc.
  }, 3000);
});

コードが少ないということは、メンテナンスが少ないということです。幸せな顧客を意味します。

于 2011-11-05T17:25:47.903 に答える
2

すでに回答を受け入れていますが、jQuery を使用せずに回答を行う方法を紹介します。

完成していませんが、コンセプトは機能しています。

   window.onload = function () {
    updateVan(0);
    function updateVan(i)
    {
        var t = setTimeout(function () {
            document.getElementById("van").style.marginLeft = i + "px";
            document.getElementById("van").style.marginTop = (i/10) + "px";
            document.getElementById("van").style.height = (100-(i/10)) + "px";
            document.getElementById("van").style.width = (100-(i/10)) + "px";
            if (i < 300) updateVan(i+1);
        },30);
    }
}

ここでの動作デモ: http://webbies.dk/tmp/tmp.html

于 2011-11-05T17:56:21.427 に答える