2014-05-09 15 views
7

Ich habe diese Funktion, um ein absolutes DIV zu verschieben und ich möchte die Funktion setTimeout ausführen. JQuery springt jedoch aus der Funktion hover() heraus, wenn es um die Zeile $(). Finish() geht. Wie führe ich etwas nach dem Finish() aus?Wie man etwas in JQuery nach der Animation macht 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); 

}); 
+0

können Sie eine Geige –

+0

schreiben Was tut * "JQuery springt aus der Hover() -Funktion" * bedeuten? Wird ein Fehler ausgegeben? Welcher Fehler? –

+0

Siehe den obigen Code, die Funktion nach dem Kommentar nicht bei Mouseout – Jelle

Antwort

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

Was auch immer Sie nach der vollständigen Animation Schreib innerhalb Funktionsblock ausgeführt werden soll.

+0

Stimmt, aber warum funktioniert der OP-Code nicht? –

+0

In meinem JSFiddle http://jsfiddle.net/G3Fes/2/ funktioniert meine Methode auch, aber auf meiner Website nicht? – Jelle

+1

JQuery Version Nach dem Ende muss es Pop-up-Warnung haben, aber es ist nicht mit JQuery 1.8.3 knallt, aber wenn Sie JQuery 1.9.1 verwenden, ist es Popup-Alarm. – dgk

1

Dies wird Ihnen helfen,

$('#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(); 
}); 
3

Versuchen Sie folgendes:

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

Ich hoffe, das hilft!

2

ich meine Frage auf diese Weise gelöst (durch die Timeout-Funktion vor dem Ziel setzen() und das Löschen des Timeout, wenn eine andere schweben durch den Benutzer durchgeführt wird)

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(); 




}); 
+0

Das löst Ihr Problem allerdings nicht wirklich. Wenn Sie eine ältere jQuery-Version verwenden, die nicht ".finish" enthält, wird dennoch ein Fehler ausgegeben. –

Verwandte Themen