Javascript 通过在JS中完成动画进行回调
我已经在JS中编写了生成动画帧的函数,我想通过完成动画来使用链接方式调用回调函数。为此,我编写了以下代码:Javascript 通过在JS中完成动画进行回调,javascript,animation,Javascript,Animation,我已经在JS中编写了生成动画帧的函数,我想通过完成动画来使用链接方式调用回调函数。为此,我编写了以下代码: var _proto = Array.prototype; var Animation = function( duration, callback ) { var begin = new Date(), delta, then = [] , cid = setInterval(function(){ delta = (new Date() - begin) / dur
var _proto = Array.prototype;
var Animation = function( duration, callback ) {
var begin = new Date(), delta, then = []
, cid = setInterval(function(){
delta = (new Date() - begin) / duration;
delta > 1 && ( delta = 1 )
callback( delta )
if( delta === 1 ) {
clearInterval( cid );
if( then.length ) {
var i = 0;
for( ; i < then.length; i++ ) {
then[i].call( this )
}
}
}
}, 10 );
return {
then : function(){
_proto.push.apply( then , _proto.slice.call( arguments ) );
return this;
}
}
};
在这种情况下,创建“then”方法是一种好方法吗?或者你可以给出任何建议。如果你有目标,你可以在没有任何库的情况下做出承诺。您的代码应该如下所示:
var Animation = function( duration, callback ) {
return new Promise(function (fulfill, reject) {
// Your code ...
setInterval(function(){
// More of your code ...
if (something) {
// When it's done ...
fulfill()
}
}, 10)
})
}
返回的promise对象应具有
then
方法。这不支持promises库中常见的某些功能:如果在动画完成运行后调用then,则不会调用回调,则不会收到错误回调,等等。如果我是你,我会保持简单,并用原始回调编写动画。如果您想要,那么可以使用许多Promission库中的一个,它们都提供了一种将回调代码转换为promise对象的方法。我想方法的名称表明我即将实现延迟对象。事实并非如此。这只是一个方法,必须在使用链接方式完成动画后调用。这有点像旧版jQuery中的成功。这是一个很大的品味问题,但我不太喜欢像你这样仅仅为了语法而使用链接。我更愿意保持它的简单性,并将回调作为常规参数传递。如果我希望能够在动画完成后添加回调(如果在开始时将回调作为参数传递,则这是不可能的),我只会使用单独的then方法对其进行编码。
var Animation = function( duration, callback ) {
return new Promise(function (fulfill, reject) {
// Your code ...
setInterval(function(){
// More of your code ...
if (something) {
// When it's done ...
fulfill()
}
}, 10)
})
}