拉斐尔路径动画

时间:2014-07-21 12:55:16

标签: jquery animation raphael jscript

你能解释一下这个物体首先到达路径中的一个点,然后转回然后到达另一个点(例如,它首先通过path2,然后返回然后通过path3。) 使用Javascript:

var obj;
var path1
var path2;


var canvas = Raphael("canvas", 620, 420);
window.onload = function() {

    obj = canvas.circle(100, 200, 10);                


    path1 = canvas.path("M100 a200L200 200");
    //option 1 way 1
    path2 = canvas.path("M200 200L400 100");
    //option 2 way 2
    path3 = canvas.path("M200 200L200 100");
    //option 3 way 3
    path3 = canvas.path("M200 200L300 300");

    window.setInterval("method_animasi()", 10); 
};

var counter = 0;
var position;
function method_animasi(){

    position = path1.getPointAtLength(counter);   

    if ( counter >= path1.getTotalLength() )
    {
        //program make random next way
           position = path2.getPointAtLength(counter);
    }
    obj.attr({cx: position.x, cy: position.y});    

    counter++;
};

jsFiddle:http://jsfiddle.net/cE26g/6/  这是我用过的代码)?

1 个答案:

答案 0 :(得分:0)

这里是:物体前进,然后返回,然后选择另一个随机方向然后再去。

Fiddle

var obj;
var paths;
var interval;
var canvas = Raphael("canvas", 620, 420);
window.onload = function()
{ 
    obj = canvas.circle(100, 200, 10);                

    paths = [
        canvas.path("M200 200L100 200"),
        canvas.path("M200 200L400 100"),
        canvas.path("M200 200L200 100"),
        canvas.path("M200 200L300 300")];

    interval = window.setInterval("method_animasi()", 10); 
};

var counter = 0;
var position;
var currentPath = 0;
var dirForward = true;

function method_animasi()
{
    if (counter >= paths[currentPath].getTotalLength() && dirForward)
    {
        dirForward = false;
    }
    else if (counter == 0 && !dirForward)
    {
        var newPath = currentPath;
        while (newPath == currentPath)
        {
            newPath = Math.floor(Math.random() * paths.length);
        }
        currentPath = newPath;
        dirForward = true;
    }
    else
    {
        position = paths[currentPath].getPointAtLength(counter);
        obj.attr({cx: position.x, cy: position.y});
    }
    if (dirForward)
    {
        counter++;
    }
    else
    {
        counter--;
    }
};