动画完成后如何在JQuery中做一些事情()

时间:2014-05-09 08:53:45

标签: javascript jquery html

我有这个函数来移动绝对DIV,我想执行setTimeout函数。但是,当涉及行$()。finish()时,JQuery跳出hover()函数。如何在finish()之后执行某些操作?

$('#header li[class!="logo"]').hover(function () {

    var leftStart = $(this).position().left;
    var width = ($(this).width() / 2) - 22;

    $('#header .pointerarrow').animate({ left: leftStart + width }, 400);

}, function () {
    $('#header .pointerarrow').finish();

    //######This does not excecute###########
    setTimeout(function () {
        alert('succeeded');
        var l = $('#header li[class="current"]').position().left;
        var b = ($('#header li[class="current"]').width() / 2) - 22;
        $('#header .pointerarrow').css({ left: l + b });
    }, 500);

});

4 个答案:

答案 0 :(得分:37)

$('#header .pointerarrow').animate(
    { left: linksstart + breedte },
     400, function() {
       // Animation complete.
  });

在功能块内完成动画写入后你想要执行什么。

答案 1 :(得分:3)

试试这个:

$('#header .pointerarrow').animate({ left: linksstart + breedte }, 400);
$('#header .pointerarrow').promise().done(function(){
    /* PUT FUNCTION HERE */
});

我希望这有帮助!

答案 2 :(得分:2)

我以这种方式解决了我的问题(通过在结束()之前放置超时功能,并在用户执行另一个悬停时清除超时)

var time = null;

$('#header li[class!="logo"]').hover(function () {
    window.clearTimeout(time);
    var linksstart = $(this).position().left;
    var breedte = ($(this).width() / 2) - 22;

    $('#header .pointerarrow').animate({ left: linksstart + breedte }, 300);


}, function () {
    time = setTimeout(function () {
        //alert('gelukt2');
        var l = $('#header li[class="current"]').position().left;
        var b = ($('#header li[class="current"]').width() / 2) - 22;
        $('#header .pointerarrow').animate({ left: l + b }, 300);
    }, 400);
    $('#header .pointerarrow').finish();




});

答案 3 :(得分:1)

这会对你有帮助,

$('#header li[class!="logo"]').hover(function () {
    var linksstart = $(this).position().left;
    var breedte = ($(this).width() / 2) - 22;
    $('#header .pointerarrow').animate({ left: linksstart + breedte }, 400,function(){
    //animation complete,
     alert('gelukt2');
     var l = $('#header li[class="current"]').position().left;
     var b = ($('#header li[class="current"]').width() / 2) - 22;
     $('#header .pointerarrow').css({ left: l + b });
    });
}, function () {
    $('#header .pointerarrow').finish();
});