2010-11-04 20 views
11

Esiste un framework javascript che utilizzerà le transizioni CSS3 per effetti come cambiare l'opacità o spostare elementi, ma tornerà a utilizzare javascript setInterval/setTimeout se non è supportato?Transizioni CSS3 con Fallback Javascript

risposta

3

Estrai il modulo di transizione YUI 3, si fa proprio questo.

+1

Una semplice transizione YUI3: YUI(). Use ('node', 'transition', function (Y) {Y.one ('# mynode'). Transition (opacity: 0);}); – PottyBert

+0

lol è semplice?dovresti controllare jquery è semplice ... perché non è semplice rispetto a Jquery. –

+0

sì, è semplice. Include anche la sandbox YUI per evitare interferenze esterne del codice – PottyBert

2

Si potrebbe guardare con http://www.modernizr.com/

+0

che sembra buona per rilevare il sostegno alle trasformazioni. Ho anche notato che mootools ha: http://mootools.net/docs/core/Fx/Fx.Tween e http://mootools.net/forge/p/fx_tween_css3 – benmmurphy

+0

Modernizr è il modo più efficace di controllo delle funzionalità al momento e a 3kb, è davvero leggero (rispetto a Mootools) – Jeepstone

+0

LOL ovviamente Modernizr è più piccolo di MooTools è un kit di rilevamento non un Framework per manipolazione dom, astrazione di classe e scripting serveride – rgb

0

purtroppo nessuna di queste alternative sembra consentirvi di utilizzare le attenuazioni, come il rimbalzo.

Il mio tentativo di utilizzare animate-enhanced ha spostato l'elemento di un pollice e poi lo ha rimosso. Mi piacerebbe davvero mantenere il rimbalzo invece di un semplice allentamento cubico o lineare.

1

Uno dei miei colleghi ha scritto un micro biblioteca che offre un numero limitato di fallback JS per Transitions: http://blogs.msdn.com/b/eternalcoding/archive/2011/12/06/css3-transitions.aspx

TRANSITIONSHELPER.computeCubicBezierCurveInterpolation = function (t, x1, y1, x2, y2) { 
    // Extract X (which is equal to time here) 
    var f0 = 1 - 3 * x2 + 3 * x1; 
    var f1 = 3 * x2 - 6 * x1; 
    var f2 = 3 * x1; 

    var refinedT = t; 
    for (var i = 0; i < 5; i++) { 
     var refinedT2 = refinedT * refinedT; 
     var refinedT3 = refinedT2 * refinedT; 

     var x = f0 * refinedT3 + f1 * refinedT2 + f2 * refinedT; 
     var slope = 1.0/(3.0 * f0 * refinedT2 + 2.0 * f1 * refinedT + f2); 
     refinedT -= (x - t) * slope; 
     refinedT = Math.min(1, Math.max(0, refinedT)); 
    } 

    // Resolve cubic bezier for the given x 
    return 3 * Math.pow(1 - refinedT, 2) * refinedT * y1 + 
      3 * (1 - refinedT) * Math.pow(refinedT, 2) * y2 + 
      Math.pow(refinedT, 3); 
}; 

Forse potrebbe essere abbastanza o una buona base per raggiungere ciò che è che stai cercando?

Bye,

David

Problemi correlati