2013-06-02 50 views
1

我无法弄清楚如何模拟这个。红色箭头处于静止位置。背景,有一个弯曲的路径。我只是移动背景位置,看起来箭头正在沿着弯曲的路径移动。在javascript中计算弧形路径

Red Arrow http://img829.imageshack.us/img829/6636/redarrowe.png

我现在所拥有的是箭头沿着45度角的目标前进。但我试图实现的是沿着这条虚线路径前进的箭头。

var interval = 100; 

var currX = -82; // Current x position 
var currY = -342; // Current y position 

var destX = -750; // Destination x position 
var destY = -850; // Destination y position 

var currentDuration = 0; 
var duration = 1800 * 1000; // Duration 

var $bg = $('#flight-wrapper'); 

var intbg = window.setInterval(function(){ 
    currentDuration += interval; 

    var leftX = destX - currX; // X pixels left 
    var leftY = destY - currY; // Y pixels left 

    var leftDuration = duration - currentDuration; // Duration left 

    var tickX = leftX/leftDuration * interval; // Pixel to offset 
    var tickY = leftY/leftDuration * interval; // Pixel to offset 

    var newX = currX + tickX; 
    var newY = currY + tickY; 

    // Prevent it going further than the destination X & Y pixel 
    currX = newX <= destX ? destX : newX; 
    currY = newY <= destY ? destY : newY; 

    if (currX <= destX && currY <= destY) { 
     window.clearTimeout(intbg); 
    } 

    $bg.css({ 
     backgroundPosition: Math.floor(currX) + 'px ' + Math.floor(currY) + 'px' 
    }); 
}, interval); 

希望有人能帮助我。

+0

你想要数学解释还是可以使用库发布工作解决方案吗? – Prinzhorn

+1

我可以请数学解释。 –

+0

考虑到你的弧可以看作是一个圆的一部分,你可以使用'sin'和'cos'来相应地转换x/y。但首先你应该使用一个jQuery插件,它允许你动画'背景位置',这使得你当前的代码已经过时并且是一行代码。然后用正弦和余弦指定你自己的缓冲函数。 – Prinzhorn

回答