我已经在AI上使用了AI'自我滑动拼图'等等。我会用它来制作一些很酷的投资组合库。
我有一个方法只是动画立方体:
this.animateSelection = function(direction,time)
{
if (time===undefined) this.time=150;
this.moveDistance=this.cubeSize+this.spacing;
switch (direction)
{
//move right
case 'r': $('#' + selectionName).transition({ x: '+=' +this.moveDistance +'px' },this.time);
break;
//move down
case 'd': $('#' + selectionName).transition({ y: '+=' +this.moveDistance +'px' },this.time);
break;
//move left
case 'l': $('#' + selectionName).transition({ x: '-=' +this.moveDistance +'px' },this.time);
break;
//move up
case 'u': $('#' + selectionName).transition({ y: '-=' +this.moveDistance +'px' },this.time);
break;
//if wrong direction is given
default: return false;
}
return true;
}
当我单次称呼它时,一切都很酷。
但问题是:
当我做的时候
myClass.animateSelection('d');
alert('bla bla bla');
在动画完成之前显示警告
我的主要AI循环在50ms内执行并管理大约200次移动,因此调用方法。我希望该方法能够执行循环直到ANIMATION完成。
回调不要成功。动画方法用于许多不同的情况和各种其他方法。它不可能像IMO那样适合。
答案 0 :(得分:1)
如果您使用myClass.animateSelection
,则当脚本点击$().transition
时,脚本的执行不会停止。相反,转换将建立一个简单转换效果的队列,将在事件循环中调用。
这称为异步行为,其优点是脚本不会停止。但是,大多数异步函数都会将回调作为可选参数,该函数将在所需函数结束或失败后调用。
在您的情况下,transition
支持回调作为附加参数:
$.fn.transition(options, [duration], [easing], [callback]);
您必须更改animateSelection
以获取回调参数:
this.animateSelection = function(direction,time,callback)
{
if (time===undefined) this.time=150;
this.moveDistance=this.cubeSize+this.spacing;
switch (direction)
{
//move right
case 'r': $('#' + selectionName).transition({ x: '+=' +this.moveDistance +'px' },this.time,callback);
break;
//move right
case 'd': $('#' + selectionName).transition({ y: '+=' +this.moveDistance +'px' },this.time,callback);
break;
//move right
case 'l': $('#' + selectionName).transition({ x: '-=' +this.moveDistance +'px' },this.time,callback);
break;
//move right
case 'u': $('#' + selectionName).transition({ y: '-=' +this.moveDistance +'px' },this.time,callback);
break;
//if wrong direction is given
default: return false;
}
return true;
}
并使用
myClass.animateSelection('d',undefined,function(){alert('bla bla bla');});
代替。