我试图调用一个HTML5-Canvas动画并在类.object
的每个项目中重复它。但JavaScript只适用于最后一项!each()只在最后一个对象上工作(使用foreach循环)
<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);
}
});
你可以改变这一行'$( '对象 ')每个(函数(){'本'$(' 对象') .each(函数(idx,obj){''id'是循环id(从零开始),obj'是数组当前循环中实际的'canvas'对象...让我知道如果这就是你想要的 – ochi
我在函数内写什么? –
@ochi在这个例子中,'idx'是匹配集内元素的索引,与元素的'id'属性无关 –