jQuery动画队列无法启动

时间:2012-06-29 08:17:44

标签: jquery jquery-animate

为什么以下代码段不起作用? 它不会给出任何错误,但它也不起作用 关于空对象我看了here

<script type="text/javascript">

    jQuery(document).ready(function(){
        var o = jQuery({});         
        var block = jQuery('#box');
        jQuery('#start').click(function(){
            o.queue('custom',function(next){
                block.animate({left:"+=500"},1000);
                next();
            });
            o.queue('custom',function(next){
                block.animate({left:"-=500"},1000); 
                next();
            });
            o.queue('custom',function(next){
                block.animate({top:"+=500"},1000);      
                next();
            });
            o.queue('custom',function(next){
                block.animate({top:"-=500"},1000);  
                next();
            });

            o.dequeue('custom'); 
        });
    });

</script>

更新1

如果我在出列呼叫之前和之后插入console.log,如下所示:

            console.log(o.queue('custom').length);
            o.dequeue('custom'); 
            console.log(o.queue('custom').length);

然后我在控制台得到4 0。这意味着函数被添加到队列中并因此出列。

更新2

如果我在块动画之后插入console.log,例如,像这样:

                block.animate({left:"+=500"},1000);
                console.log('1');

然后我得到1 2 3 4,这意味着所有4个函数都被调用。

更新3

我的HTML非常简单:

1个输入按钮和1个div标签。 div有以下css:

width:200px;height:200px;display:block;background:none repeat scroll 0 0 green

1 个答案:

答案 0 :(得分:1)

我让它在jsbin上工作(您可以使用右上角的按钮进行编辑)。

您需要在position:relative元素上设置#block。没有它,div将不会受到所应用的属性更改的影响,因为the initial value of the property is static)。

在MDN文档中,static位置表示:

  

正常行为。顶部,右侧,底部和左侧属性不会   应用

但是,属性当然会针对静态元素进行更改,正如您在example中看到的那样(检查控制台)。但它们没有任何明显的效果。

希望这会有所帮助。您可以将我所做代码的所有其他更改还原,这是在设置位置之前完成的。