Supponiamo di avere qualche div, e io uso .animate({opacity:0},400, function(){});
per i suoi figli. È mai possibile quindi ottenere il tempo rimanente per completare un'animazione? ad es. 200 ms rimanenti o 0 se non ci sono animazioni? Grazie.C'è un modo per ottenere il tempo di animazione rimanente?
risposta
Per aiutarvi a capire meglio come è possibile utilizzare la funzione step
[come inserito da gdoron]
ho creato un esempio utilizzando l'istruzione di funzione per ottenere il tempo rimanente:
(fare clic sul pulsante get state!
per interrompere l'animazione e recuperare il tempo rimanente!)
demo with distance
demo with opacity
Distanza esempio jQuery:
var time = 4000;
var distance = 300;
var currentTime = 0;
$('#ball').animate({
left: distance
}, {
duration: time,
step: function (now, fx) {
currentTime = Math.round((now * time)/distance);
var data = fx.prop + ' ' + Math.round(now) + '; <b>' + currentTime + 'ms</b> ';
$('body').append('<p>' + data + '</p>');
},
easing: 'linear'
});
$('#getTime').click(function() {
$('#ball').stop();
$('body').prepend('<p>currentTime is:' + currentTime + ' ms; REMAINING: ' + (time - currentTime) + 'ms</p>');
});
- Si può vedere come ho usato il
fx.prop
all'interno delanimation step
per ottenere la (left
) proprietà che è attualmente animato. - si può vedere come: conoscere il tempo di animazione e la distanza (opacità, qualunque cosa ...) si può facilmente recuperare il 'fermato/pausa' stato da qualche semplice matematica (
(now*time)/distance
) e grazie allanow
valore restituito .
Grazie questo è molto utile! E sembra che non colpisca molto le prestazioni se limitiamo la funzione di passo alla sola scrittura variabile. Ad ogni modo non verrà chiamato ogni 1 ms o qualcosa del genere. – Anonymous
@ user1125062 Non dovrebbe, perché stiamo solo accedendo a qualcosa che sta già facendo girare la nostra animazione. –
Non ho idea del motivo per cui avete bisogno, ma il step
posso aiutare a estrarre questo valore:
Fase Funzione
La seconda versione di .animate() fornisce un'opzione di passaggio - una funzione di callback che viene attivata in ogni fase dell'animazione. Questa funzione è utile per abilitare i tipi di animazione personalizzati o per modificare l'animazione mentre si sta verificando. Accetta due argomenti (now e fx) e questo è impostato sull'elemento DOM che viene animato.
ora: il valore numerico della proprietà di essere animato ad ogni passo
fx: un riferimento al prototipo oggetto jQuery.fx, che contiene una serie di proprietà quali elem per l'elemento animata, inizio e terminano rispettivamente per il primo e l'ultimo valore della proprietà animata e prop per la proprietà da animare.
hmmm, ma cosa dovrei fare con quello? :) – Anonymous
@ user1125062. È possibile ottenere il valore corrente, il primo valore, l'ultimo valore, ecc ', basta giocare con esso. Ad ogni modo sono sicuro che ci sono altri modi per fare ciò che stai cercando di fare ... – gdoron
Senza un setInterval o questo metodo, no, AFAIK. Questi sono gli unici modi per ottenerlo. – inhan
Ascolta, non importa la funzione step
di cui tutti continuano a parlare. Una volta avevo bisogno di quello che hai fatto e ho scritto il mio che semplicemente ha invertito il tempo lasciato a dare un'occhiata al tempo di animazione totale (dovrebbe già essere noto a te dato che una volta hai dato questo numero a jQuery) e al del opacità corrente e di destinazione. Quindi basta moltiplicare quel quoziente con il tempo di animazione totale, avere la somma sottratta dal tempo totale. Semplice come quella.
pseudo-codice:
func calculate-time-left-in-a-running-fade-in-animation:
{
var current_opacity = $elem.css('opacity');
var target_opacity = this.getTargetOpacity();
var total = this.getTotalAnimationTime();
var quotient = current_opacity/target_opacity;
return total - quotient * total;
}
Approccio interessante, non pensarci! Sebbene se la precisione fosse importante, il passo è l'unica strada da percorrere. – Anonymous
Recuperare il valore dell'attributo o utilizzare la variabile now è la stessa cosa, purché l'animazione sia in pausa. Nell'esempio del passaggio di jQuery @roXon ha dato che ci sarà un sacco di spese generali in corso, ad ogni passo dell'animazione. Potrebbe persino introdurre variabili globali come in effetti l'esempio. Se si intende sospendere l'animazione prima del calcolo (sempre come nell'esempio) e riprendere l'animazione in seguito, non c'è assolutamente alcuna differenza. Direi anche che ottenere questo valore calcolato sotto un'animazione in esecuzione produce gli stessi risultati. –
Il prodotto memorizzato della logica di passo, il valore calcolato del tempo rimanente, non è come una lista dal vivo, il valore non si aggiorna al valore più accurato. E non sarà nient'altro che un "vecchio" calcolo che usi ogni volta che lo usi. Avrai anche un intermediario responsabile di colmare questa lacuna informativa, la funzione di passo, che in teoria dovrebbe ostacolare la precisione. Ma se invece fai lo stesso calcolo esattamente quando hai bisogno di sapere il tempo rimanente, non sarebbe nemmeno più preciso? E anche più economico, sia per la leggibilità del codice che per l'elaborazione dei costi generali. –
- 1. Tempo rimanente di QTimer
- 2. System.Timers.Timer Come ottenere il tempo rimanente fino a Elapse
- 3. come trovare il tempo rimanente di un setTimeout()
- 4. sscanf ottenere il valore della stringa rimanente
- 5. Come stimare il tempo di download rimanente (con precisione)?
- 6. Tempo rimanente ai prossimi 5 minuti - Javascript
- 7. Tempo rimanente stimato, cosa mi manca?
- 8. Come ottenere textarea per occupare il 100% dello spazio rimanente?
- 9. tempo rimanente fino carica è completa, iOS
- 10. C'è un modo per ottenere il tempo epoch usando un comando di Windows?
- 11. Ottieni il tempo rimanente della batteria disponibile da un telefono Android
- 12. C'è un modo per ottenere il tempo trascorso su cui è stato eseguito un server Rails?
- 13. Animazione di un MKOverlayView
- 14. Usa UFormat per ottenere il tempo unix
- 15. Il modo migliore per ottenere il tempo di modifica dei file in secondi
- 16. Usa lo spazio rimanente allo stesso modo per n colonne
- 17. Ottenere il tempo di compilazione JAR
- 18. Oggetto proxy per ottenere il tempo di sistema
- 19. Ottenere il tempo di esecuzione di un thread java
- 20. Uso di django prefetch_related() per ottenere il tempo dell'ultima attività
- 21. C'è un modo per ottenere un oggetto da un set in tempo O (1)?
- 22. nginx set conteggio rimanente per limit_req nell'intestazione
- 23. Eclipse per ottenere il tempo di esecuzione del programma
- 24. Come utilizzare struct timeval per ottenere il tempo di esecuzione?
- 25. c'è un modo per cambiare il tempo di mura per il lavoro PBS attualmente in esecuzione
- 26. Animazione di un gradiente SVG
- 27. Dart c'è un modo per misurare il tempo di esecuzione per un piccolo codice
- 28. Come posso ottenere un ListView GridViewColumn per riempire lo spazio rimanente nella mia griglia?
- 29. Un modo per stimare o prevedere il tempo di elaborazione Jsoup di un blocco di HTML?
- 30. Ottenere solo il tempo di un oggetto datetime
Solo per curiosità ... perché è necessario che il valore? –
@ RokoC.Buljan. È un hobby, immagino. È il momento delle animazioni della collezione. – gdoron
Ho problemi con l'accodamento di alcuni callback ai bambini - non sempre si attiva e non è facile determinare a quale coda accodare, quindi ho voluto provare con setTimeout per renderlo più affidabile. – Anonymous