【发布时间】:2016-08-24 06:50:02
【问题描述】:
我正在尝试调用 HTML5-Canvas 动画并在每个项目中使用 .object 类重复它。但是 javascript 仅适用于最后一项!
<ul>
<li><canvas class="object"></canvas></li>
<li><canvas class="object"></canvas></li>
<li><canvas class="object"></canvas></li>
<li><canvas class="object"></canvas></li> //this one shows
</ul>
$('.object').each(function(){
var $class = $(this).attr('class').split(' ').pop();
var $library = new lib.Animation();
myAnimation($class, $library);
});
function myAnimation($class, $library) {
var $canvas = document.getElementsByClassName($class);
for (i = 0; i < $canvas.length; i++) {
var $canvas_root = $library;
var $canvas_stage = new createjs.Stage($canvas[i]);
$canvas_stage.addChild($canvas_root);
$canvas_stage.update();
createjs.Ticker.setFPS(24);
createjs.Ticker.addEventListener("tick", $canvas_stage);
}
}
我使用 ID 让它工作,但我更愿意让它对每个具有类的项目工作:
<ul>
<li><canvas id="object1" class="object"></canvas></li>
<li><canvas id="object2" class="object"></canvas></li>
<li><canvas id="object3" class="object"></canvas></li>
<li><canvas id="object4" class="object"></canvas></li> //this one shows
</ul>
$('.object').each( function() {
var $id = $(this).attr('id');
var $library = new lib.orbeOther();
myAnimation($id, $library);
});
function myAnimation($id, $library) {
var $canvas = document.getElementById($id);
var $canvas_stage = new createjs.Stage($canvas);
$canvas_stage.addChild($library);
$canvas_stage.update();
createjs.Ticker.setFPS(24);
createjs.Ticker.addEventListener("tick", $canvas_stage);
}
});
【问题讨论】:
-
您可以将这一行
$('.object').each( function() {更改为$('.object').each( function(idx, obj) {,其中id是循环ID(从零开始),obj是当前的实际canvas对象数组的循环......让我知道这是否是你想要的 -
函数里面写什么?
-
@ochi 在该示例中,
idx是匹配集中元素的索引,与元素的id属性无关 -
这就是我所说的循环ID,应该说循环索引,但这里已经很晚了;很抱歉造成混乱
标签: javascript jquery html for-loop each