您好,
我正在我的代码中初始化以下循环。代码是用mootools编写的。
CANVAS.init({ canvasElement : 'canvas', interactive : true });
var itemlayer = CANVAS.layers.add({ id : 'items' });
for(var j = 0; j < 5; j++)
{
for(var i = 0; i < 5; i++)
{
itemlayer.add({
id : 'item-'+i + '-' + j,
x : 51 * i,
y : 51 * j,
w : 50,
h : 50,
state : 'normal',
interactive : true,
colors : { normal : '#f00', hover : '#00f' },
events : {
onDraw : function(ctx){
ctx.fillStyle = this.colors[this.state];
ctx.fillRect(this.x,this.y,this.w,this.h);
this.setDims(this.x,this.y,this.w,this.h);
}
}
});
}
}
/* object that hold the information whether a certain object
* is in animation right now or not. This is used to prevent
* multiple Cmorph instances working on the same item
* */
var locked= {};
for(i= 0; i<6; i++)
for(j= 0; j<6; j++)
{
itemid = 'item-'+i+'-'+j;
itemid : false,
}
//then once I have done that
//animate all items with the function given below
function animate()
{
for(i=0;i<6;i++)
for(j=0;j<6;j++)
{
itemid = 'item-'+i+'-'+j;
if(locked.itemid)return; //guess even this will return errors!
locked.itemid = true;
var item = CANVAS.layers.get('myLayer').get(itemid);
new Cmorph(item,{
duration : 1000,
transition : 'bounce:out',
onComplete : function()
{
locked.itemid = false;
}
}
).morph({
y : (item.y == 50?375:50),
scale : (item.scale == 1?2:1)
});
}
}
CANVAS.addThread(new Thread({
id : 'myThread',
onExec : function(){
CANVAS.clear().draw();
}
}));
我的语法是否正确,所有ID都会被锁定,或者我是否会出错。如果我犯了错误,请你纠正我。我知道这是一个非常愚蠢的怀疑,但请耐心等待!谢谢:))
答案 0 :(得分:2)
我不确定“锁定”是什么意思,但语法有一些错误。我就是这样做的:
var locked = [];
for (var i = 0; i < 6; i++) {
for (var j = 0; j < 6; j++) {
locked.push("item-"+i+"-"+j);
}
}
它构造一个字符串数组,保存你的item-string。
您不能在JSON({}
)中使用普通代码语句。如果您需要这种(更复杂的)行为,您需要创建它并在之后填充它。
编辑:根据您的澄清:我可以在最后发现一个语法错误:您的内部for
- 循环错过了他的结束}
。另一方面,我不太了解mootools,所以可能会出现与mootools相关的问题。
答案 1 :(得分:0)
您无法锁定对象。相反,您可以将数组用作锁定 -
var locked = [];
for (var i = 0; i < 6; i++) {
for (var j = 0; j < 6; j++) {
var itemStr = "item-"+i+"-"+j;
locked.push(itemStr);
}
}
这会将所有ID存储在已锁定的阵列中,您可以使用locked[index]
答案 2 :(得分:0)
当你说“锁定”时,我不确定你的意思,但是你是否试图创建一个使用itemid
作为属性的对象,这些属性设置为false?
/* create empty object */
var locked = {};
/* loop & populate */
for(var i = 0; i < 6; i++) {
for(var j = 0; j < 6; j++) {
var itemStr = "item-" + i + "-" + j;
locked[itemStr] = false;
}
}
/* use id */
if(!locked["item-0-0"]) {
// do something
}
答案 3 :(得分:0)
你的问题并不清楚,但我认为你的意思可能是:
var locked= {};
for(i= 0; i<6; i++)
for(j= 0; j<6; j++)
locked['item-'+i+'-'+j]= false;
JavaScript {name: value}
中的名称对象文字仅限于引用的字符串或不带引号的文字名称,而不是一般表达式。所以你不能在对象文字中有一个变量名。相反,您必须使用[]
访问权限在创建后编写属性。 (a['b']
与a.b
相同。)