编辑:here是简化的JSFiddle。事件侦听器在第60行。
我正在使用js和three.js为移动的蒲公英种子制作动画,如果单击种子,则需要停止它。我正在向每个种子添加事件侦听器,如下所示:
for (var i = 0; i < seeds.length; i++) {
s=seeds[i];
domEvents.addEventListener(seeds[i].mesh, 'click', function(event){
s.clicked = true;
console.log('you clicked on the mesh');
$('#id01').modal('show');
}, false);
}
问题在于,单击种子后,计算机不再知道's'或seed [i]是什么,因为循环已结束。如果我为每个种子手动添加事件侦听器,则种子将正确停止。但是,这效率低下。这将是19个块,唯一的变化是数字:
domEvents.addEventListener(seeds[1].mesh, 'click', function(event){
seeds[1].clicked = true;
$('#id01').modal('show');
}, false);
我停止种子的代码如下:
if (s.clicked === true) {
console.log('hi');
s.mesh.position.x = s.currentX;
s.mesh.position.y = s.currentY;
} else { run the code that moves the seed
停止种子的代码有效,但是对于错误的种子。它将停止最后添加到种子数组的任何种子。
是否有一种有效的方法将事件侦听器正确添加到每个种子?我怎么知道点击种子的索引?