Ich entwickle Non-jQuery-responsive Image-Slider basierend auf CSS3-Übergängen.Browser erzwingen, Reflow beim Ändern von CSS auszulösen
Die Struktur ist einfach: ein Viewport und innen relativ positionierte UL mit links schwebenden LIs.
Ich habe ein Problem in einer solchen Situation konfrontiert:
- Der Benutzer klickt auf "zurück" Pfeil.
- JS hängt die richtige LI vor dem aktuell angezeigten LI-Knoten an.
- Vorläufig hat UL den CSS-Übergang als
none 0s linear
festgelegt, um Animationsänderungen zu verhindern. In diesem Moment reduziere ich den linken UL-CSS-Wert um die Slider-Breite (sagen wir: von 0px bis -1200px), um die gleiche Ansicht zu erhalten. - Jetzt ändere ich die Übergangseigenschaft von UL zu
all 0.2s ease-out
. - Jetzt ändere ich die linke Eigenschaft von UL, um die CSS3-Animation auszulösen. (sagen wir: von -1200px zu 0px).
Was ist das Problem? Browser vereinfacht Änderungen und macht keine Animationen.
Stoyan Stefanov schrieb über Reflow-Problem in seinem Blog , aber in diesem Fall funktioniert nicht versuchen, einen Reflow auf Element erzwingen.
Dies ist ein Stück Code ist dies zu tun (ich Browser-Präfixe zur Vereinfachung ausgelassen):
ul.style.transition = 'none 0s linear 0s';
ul.style.left = '-600px';
ul.style.transition = 'all 0.2s ease-out';
ul.style.left = '0px';
Hier Geige Problem in Aktion zu sehen: http://jsfiddle.net/9WX5b/1/
Animationen auftreten, wenn eine Eigenschaft im CSS geändert wird. Es ist nicht notwendig, 'none 0s linear 'anzuwenden. Nichts wird animiert, bis Sie die Eigenschaft' left 'ändern. –
Das Deaktivieren des Übergangs war wichtig, da ich die Position der älteren Folie nach dem Hinzufügen der neuen Folie unsichtbar fixieren musste. – Simon