首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript:在css动画之后继续执行

Javascript:在css动画之后继续执行
EN

Stack Overflow用户
提问于 2012-08-04 22:29:54
回答 1查看 99关注 0票数 0

我有应用‘自我滑动拼图’与人工智能等。我会用它来做一些很酷的投资组合画廊。

我有一个方法可以让立方体动画化:

代码语言:javascript
复制
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;        
}

当我调用它时,一切都很酷。

但问题是:

当我这样做的时候

代码语言:javascript
复制
myClass.animateSelection('d');
alert('bla bla bla');

在动画完成之前显示警报

我的主AI循环在50ms内执行,管理大约200次移动,因此调用method。我想让这个方法保持循环的执行,直到动画完成。

回调:做不到。动画方法可用于许多不同的场合,也可用于各种其他方法。这是不可能的,使它适合我。

EN

回答 1

Stack Overflow用户

发布于 2012-08-04 22:42:52

如果使用myClass.animateSelection,则脚本在命中$().transition时不会停止执行。相反,转换将建立一个队列,其中包含一些简单的转换效果,该队列将在事件循环中调用。

这被称为异步行为,它的优点是脚本不会停止。然而,大多数异步函数都会将回调作为可选参数,该参数将在期望效果的函数结束或失败后调用。

在您的示例中,transition支持回调作为附加参数:

代码语言:javascript
复制
$.fn.transition(options, [duration], [easing], [callback]);

您必须更改您的animateSelection以接受回调参数:

代码语言:javascript
复制
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;        
}

并使用

代码语言:javascript
复制
myClass.animateSelection('d',undefined,function(){alert('bla bla bla');});

而不是。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11809379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档