循环动态javascript转换一个接一个,而不是一次全部
Loop kinetic javascript transitions one after other instead of all at once
我想在html5 canvas中一个接一个地排队几个转换。循环转换函数一次调用所有转换。我不知道如果回调会这样做,如果迭代超过100。我想这样做:——
(i = 0; i<10;我+ +){move(circle,Math.floor(Math.random()*1000),400);
}
move是我定义的函数,用于进行一些转换。它工作得很好。
这里,我想让圆在每次迭代中改变它的位置,但它只改变一次位置。
你可以这样做:
var i=10;
var interval = window.setInterval(function(){
move(circle,Math.floor(Math.random()*1000), 400);
console.log(i);
if(!--i) {
window.clearInterval(interval);
}
}, 400); // wait 400 msecs between calls
或者,如果您的move函数愿意在转换完成后调用回调函数:
var i=10;
var callback = function(){
if(i--){
move(circle,Math.floor(Math.random()*1000),400, callback);
}
}
callback();
当然。这不是问题的解决方案,而是一种技巧。我首先将指令存储在一个单独的数组(transitionsequence)中,并对callback使用递归回调(在kinetic中定义的回调)。这不是很有效的方法,但我不在乎,只要它能解决问题。:)
' function move2(I, limit) {
var obj = transitionsequence[i].object;
obj.transitionTo({
y:100,
duration: 0.3,
callback : function()
{
obj.transitionTo({
x:transitionsequence[i].x,
duration:0.3,
callback: function()
{
obj.transitionTo({
y:transitionsequence[i].y,
duration:0.3,
callback: function()
{
if(i < limit)
move2(i+1 , limit);
}
});
}
});
}
});
};`
您的方法不起作用的原因是因为浏览器没有机会在您的绘制步骤之间重新绘制画布。传统上,这是通过渲染单个步骤(帧)然后等待一小段时间来解决的,但是最近的浏览器中有一个新功能:requestAnimationFrame
,它正在解决这个问题。
检查javascript动画:从setInterval
到requestAnimationFrame
和requestAnimationFrame
的智能动画(他们还展示了如何在不支持requestAnimationFrame
的浏览器中创建动画的shim)。
(我不知道kinetic.js,但它甚至可能直接支持这样的shim)。
相关文章:
- 引导程序崩溃一次只能看到一个
- 有没有一个抽象层,这样我就可以集成一次,然后使用pusher、pubnub或faye
- 一次又一次地在新的和相同的选项卡中打开一个url
- 如何在设定的时间间隔内一次只显示一个图像
- 复选框:一次只允许单击一个复选框
- 使用 JavaScript 一次为一个元素设置多个属性
- 一次显示一个隐藏指令-AngularJS
- 我可以使用JS一次使用JSON数组中的一个字符串吗
- 一次显示一个指令AngularJS
- 运行“;非“;单击另一个函数中的函数仅一次
- 复选框一次选中一个不在gridview中工作
- 复选框一次选中一个不起作用
- 什么'是从对象列表中一次编辑一个对象的正确Angular/Firebase方法
- 在一组复选框中,一次只允许选择一个
- Slding表单不会一次显示一个表单
- 每天递减一个变量一次 - Javascript
- 如何在下一次 AJAX 调用中访问从一个 AJAX 调用返回的变量
- 如何每 10 秒调用一次 JS 函数,然后以角度激活一个函数
- 重置功能,因此一次只有一个打开
- JavaScript-如何创建一个一次只能运行一次的函数