2014-05-09 9 views
7

Ho questa funzione per spostare un DIV assoluto e voglio eseguire la funzione setTimeout. Tuttavia, JQuery salta fuori dalla funzione hover() quando arriva alla riga $(). Finish(). Come posso eseguire qualcosa dopo il finish()?Come fare qualcosa in JQuery dopo l'animazione Fine()

$('#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

è possibile inviare un violino –

+0

Che cosa significa * "JQuery salta fuori dalla funzione hover()" * significa? Viene generato un errore? Quale errore? –

+0

Vedere il codice di cui sopra, la funzione dopo il commento non eccecute sul mouseout – Jelle

risposta

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

Che cosa mai si desidera eseguire dopo la completa scrittura animazione all'interno del blocco funzionale.

+0

Vero, ma perché il codice dell'OP non "funziona"? –

+0

Nel mio JSFiddle http://jsfiddle.net/G3Fes/2/ anche il mio metodo funziona, ma sul mio sito web no? – Jelle

+1

JQuery Version Dopo aver terminato, è necessario che venga visualizzato un avviso di pop-up, ma non sta saltando fuori con JQuery 1.8.3 ma quando si utilizza JQuery 1.9.1 viene visualizzato un avviso di apertura. – dgk

1

Questo vi aiuterà,

$('#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

Prova questo:

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

Spero che questo aiuta!

2

ho risolto la mia domanda in questo modo (mettendo la funzione di timeout prima del traguardo() e di compensazione il timeout se un altro passaggio del mouse viene eseguita dall'utente)

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

Questo però non risolve il tuo problema. Se si utilizza una versione precedente di jQuery che non ha '.finish', genererà comunque un errore. –

Problemi correlati