2011-11-16 13 views
19

Mi piacerebbe fare la cosa più strana: apportare un cambiamento di valore con animate che non è una proprietà css ma solo una variabile.jQuery animate di valore personalizzato (non una proprietà CSS)

Ho bisogno di questo perché voglio ruotare un elemento quando un utente fa clic sul suo bordo. Quindi ho bisogno di animare il valore dell'angolo e quindi usarlo in un algoritmo di disegno personalizzato.

Ho provato a utilizzare la proprietà css di un DIV nascosto solo per memorizzare il suo valore di angolo e animarlo, ma non funziona correttamente.

Qualcuno mi può aiutare con esso per favore?

+0

Secondo il JQuery animare doc http://api.jquery.com/ animate /: "Oltre alle proprietà di stile, è possibile animare alcune proprietà non di stile come scrollTop e scrollLeft, nonché proprietà personalizzate." – mjhm

risposta

58

Proprio imbattuto in questo mentre la ricerca della stessa cosa e la risposta corretta sembra essere

$({foo:0}).animate({foo:100}, { 
    step: function(val) { 
     // val takes values from 0 to 100 here 
    } 
}) 

Trovato su http://james.padolsey.com/javascript/fun-with-jquerys-animate/

+0

Questo è quello che stavo cercando. Non voglio che gli attributi, gli stili o le proprietà JavaScript di qualsiasi elemento DOM vengano modificati. – funrob

+0

Si noti che il valore iniziale deve essere zero. Quindi, probabilmente è più semplice assumere un valore finale di "1" e fare il proprio calcolo del progresso: val = start_val * (1-val) + end_val * val; –

+0

Questo è un grande trucco da imparare. +1 questa dovrebbe essere la risposta –

-3

jQuery ha qualcosa chiamato step function che gli incendi dopo cambiare mai nell'animazione,

$('li').animate({ 
    opacity: .5, 
    height: '50%' 
}, 
{ 
    step: function(now, fx) { 
    var data = fx.elem.id + ' ' + fx.prop + ': ' + now; 
    $('body').append('<div>' + data + '</div>'); 
    } 
}); 
+8

A mio parere, questo non risponde alla domanda del poster originale. Ho trovato questa pagina in cerca di fare ciò che il poster originale voleva fare (usare animare con un easing, ma NON con una proprietà CSS), e questo non risponde alla domanda. – Flipster

+2

Questo non anima in modo specifico * non-proprietà *. La risposta di @ thg435 è quella giusta. – Ciantic

+0

La risposta di @georg risponde alla domanda –

2

Annoyingly non è possibile eseguire la funzione animate senza effettivamente fornire alcune proprietà CSS su cui lavorare su (non fornisce i valori in mezzo).

Non c'è bisogno di avere anche l'animazione a lavorare su l'elemento effettivo (o variabile) che si desidera modificare in modo che sia possibile incidere a lavorare utilizzando l'argomento step come descritto da @Andrew in questo modo:

$('<div/>').css({ height: _your_start_value }).animate({ 
    height: _your_end_value 
}, { 
    step: function (currentValue) { 
     //do what you need to with the current value.. 
    } 
}); 

Tuttavia, questo è piuttosto inefficiente in quanto modifica la proprietà CSS (anche se non collegata) dell'elemento CSS in modo inutile. È meglio usare semplicemente una libreria "tweening" come Tween JS per fare questo genere di cose.