0

我的自定义函数的回调不起作用。请问有人能帮我吗?

<html>
<body>
<script src='jquery-1.8.2.js'></script>
<script>
$(document).ready(function(e){
  function cb(){
    alert('animation finish');
  }
  $('button').bind({
    'click':function(e,cb){
        e.preventDefault();
        $('div').animate({'height':200,'width':200},1000);
        cb();
     }
  })
})
</script>
<style>
div{
  height:5px;width:5px;background-color:yellow;
}
</style>

<button>click me</button>
<div></div>

</body>
</html>

编辑: 我做不到.animate(...,1000,function(){...}) 我用了这条线

$('div').animate({'height':200,'width':200},1000);

只是为了表示执行中的其他一些函数——它相对复杂,条件更多,并且根据各种参数调用不同的动画。

基本上,在所有这些动画结束之后,我想要一个结束函数cb()来执行;这就是我遇到问题的地方。

也许这样的事情是合适的:

<script>
$(document).ready(function(e){
  var status=0;
  var tmp1=2;tmp2=7;
  function cb(){
    alert('animation finish');
    console.log(status);
  }

  function do_func1(){
     status = tmp1+tmp2;
     $('#ele1').animate({'height':200,'width':200},1000);
  }
  function do_func2(){
     status = tmp1*tmp2;
     $('#ele2').animate({'height':300,'width':300},2000);
  }
  function do_func3(){
     status = tmp1+tmp1;
     $('#ele3').animate({'height':400,'width':400},500);
  }

  function func1(){
     if('a'=='b'){
         do_func1();
     }else if('a'=='c'){
         do_func2();
     }else{
         do_func3();
     }
  }

  $('button').on({
    'click':function(e,cb){
        e.preventDefault();
        func1();
        cb();
     }
  })
})
</script>
4

3 回答 3

1

试试这个 :

$(document).ready(function (e) {
  $('button').bind({
    'click': function (e) {
        $('div').animate({
            'height': 200,
            'width': 200
        }, 1000, function () {
            cb()
        });
        e.preventDefault();
    }
  })
})

function cb() {
alert('animation finish');
}

例如:http: //jsfiddle.net/xP25Q/2/

于 2013-01-31T12:57:55.290 回答
0

您正在调用事件提供的回调函数,而不是您之前在单击事件处理程序中定义的回调函数。

如果要调用方法,可以在事件处理程序中重命名参数或重命名函数并更改方法调用。

于 2013-01-31T12:51:05.450 回答
0

你可以做这样的事情

  <script>

    function cb(){
        alert('animation finish');
    }

    //-----------------------
    $(function()
      {
        $('button').on('click',function(e)
          {
              e.preventDefault();
              var steps=0;
              var totalSteps=5;    // for example

              var checking=setInterval(function()
                                       {
                                         if(steps===totalSteps)
                                         {
                                           cb();
                                           clearInterval(checking);
                                         }
                                       },30);

            $('div').animate({'height':200,'width':200},1000, function(){steps++;});
            $('div').animate({...  another animation  },1000, function(){steps++;});
            ...
            $('div').animate({...  another animation  },1000, function(){steps++;});


         })  // ..on
    }) // ready function
 </script>

您还可以将其更改为step++您想要的任何其他内容,然后在检查函数中编写一个适当的条件以便对其采取行动......

于 2013-01-31T16:18:59.773 回答