我正在尝试创建一个动画,我在加载页面10秒后在Raphael中创建了4个圆圈。然后,10秒后,我想删除所有这些圈子,并再制作10个圈子(10个新圈子,其名称与原始圈子不同)。
这就是我所拥有的:
var paper = Raphael(0, 100, 1350, 800);
setTimeout(function() {
var a1 = paper.circle(200,200,100);
var a2 = paper.circle(300,300,100);
var a3 = paper.circle(400,400,100);
var a4 = paper.circle(500,500,100);
}, 10000);
setTimeout(function() {
a1.remove();
a2.remove();
a3.remove();
a4.remove();
var b1 = paper.circle(300,200,100);
var b2 = paper.circle(400,300,100);
var b3 = paper.circle(500,400,100);
var b4 = paper.circle(600,500,100);
}, 20000);
然而,当我到send setTimeout时,.remove()
没有做任何事情。他们杀死了剧本的其余部分。当我拿出它们时,新的圆圈创造得很好,但我无法摆脱第一套。
我理解这是绑定的东西,但我不能让它工作。我尝试在第一个setTimeout中执行此操作:
setTimeout(function() {
var a1 = paper.circle(200,200,100);
$(a1.node).live();
var a2 = paper.circle(300,300,100);
$(a2.node).live();
var a3 = paper.circle(400,400,100);
$(a3.node).live();
var a4 = paper.circle(500,500,100);
$(a4.node).live();
}, 1000);
但当它到达第一个.live()
时就会死亡。
有什么建议吗?我觉得有一些非常基本的东西我不知道。也许在幕后解释它正在尝试做什么?
我将把它扩展到近100帧(100 setTimeouts)。关于如何提高效率的任何建议?我对此有点新鲜。任何建议将不胜感激。
答案 0 :(得分:1)
那是因为圈子是在传递给第一个setTimeout的匿名函数内声明的。如果从变量声明中删除var
,它们将是全局的,并且您的代码应该可以正常工作。
全球化我的意思是他们属于window
。您可以将其引用为window.varname
,或仅引用varname
(如果在您尝试引用var varname
的同一范围内没有其他varname
。)