JavaScript动态图

时间:2013-02-07 14:41:42

标签: javascript jquery web-applications raphael jointjs

快速提问,我对JavaScript很陌生,我无疑会从这个项目中学到很多东西。所以我提出一个问题(这可能是一个愚蠢的问题),我的问题是:

我打算构建一个动态生成Raphael或Joint.js形状的Web应用程序,两者都非常相似,动态我的意思是在用户输入之前会有一定数量的对象需要绘制,例如他们希望绘制的对象数量 - 所以这里有一些代码来强化我的问题:

var erd = Joint.dia.erd;
Joint.paper("world", 800, 250);

var e1 = erd.Entity.create({
    rect: {
        x: 220,
        y: 70,
        width: 100,
        height: 60
    },
    label: "Entity"
});

所以,我创建了一个矩形类型的对象,但这是我想知道的 - 我可以这样做:

var erd = Joint.dia.erd;
Joint.paper("world", 800, 250);
int x, y;
for (int i = 0; i < numOfUserDefObjects; i++) {
    var e1 = erd.Entity.create({
        rect: {
            x: x,
            y: y,
            width: 100,
            height: 60
        },
        label: "Entity"
        x + 20;
        y - 40;
    });
}

令我困惑的是var e1。如果要创建2个对象,只要循环第二次遍历循环/创建第二个对象,循环中创建的第一个对象是否会从我的SVG / Canvas中删除/删除/覆盖?

对此的一点了解将不胜感激!再次,缺乏JavaScript经验,但这将改变。

再次感谢。

1 个答案:

答案 0 :(得分:2)

在javascript中,用var声明的局部变量具有函数范围。这意味着每个函数只有一个局部变量的副本。因此,在第二个代码块中,变量e1只有一个副本,而for循环在每次迭代中都为它分配不同的值。

你可以做你正在做的事情,但是e1在你完成时只有一个值,并且该值将是分配给它的for循环的最后一次迭代。

我不确切知道你要完成什么,但你可以像这样创建一个对象数组:

var erd = Joint.dia.erd;
Joint.paper("world", 800, 250);
var x = 0, y = 0;
var objs = [];
for (var i = 0; i < numOfUserDefObjects; i++) {
    objs.push(erd.Entity.create({
        rect: {
            x: x,
            y: y,
            width: 100,
            height: 60
        },
        label: "Entity"
    }));
    x += 20;
    y -= 40;
}
// objs now contains an array of the created objects

注意:我还初始化了x和y,修复了使用var而不是int的声明,并在for循环中正确递增和递减x和y。您发布的代码中存在大量语法错误。