Animate element transform obróć

Jak obrócić element z jQuery ' s .animate()? Używam poniższej linii, która obecnie animuje krycie poprawnie, ale czy to obsługuje transformacje CSS3?

$(element).animate({
   opacity: 0.25,
   MozTransform: 'rotate(-' + -amount + 'deg)',
   transform: 'rotate(' + -amount + 'deg)'
});
Author: Dyin, 2011-03-28

7 answers

O ile wiem, podstawowe animacje nie mogą animować nieliczbowych właściwości CSS.

Wierzę, że można to zrobić za pomocą funkcji Krok i odpowiedniej transformacji css3 dla przeglądarki użytkowników. Transformacja CSS3 jest trochę trudna do pokrycia we wszystkich przeglądarkach (IE6 musisz na przykład użyć filtra Matrix).

EDIT : Oto przykład, który działa w przeglądarkach webkit (Chrome, Safari): http://jsfiddle.net/ryleyb/ERRmd/

Jeśli chciał wspierać IE9 tylko, można użyć transform zamiast -webkit-transform, lub -moz-transform będzie wspierać Firefoksa.

Sztuczka polega na animowaniu właściwości CSS, na której nie zależy nam (text-indent), a następnie użyciu jej wartości w funkcji step do wykonania obrotu:

$('#foo').animate(
..
step: function(now,fx) {
  $(this).css('-webkit-transform','rotate('+now+'deg)'); 
}
...
 92
Author: Ryley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-28 20:32:14

Odpowiedź Ryleya jest świetna, ale mam tekst w elemencie. Aby obrócić tekst wraz ze wszystkim innym, użyłem właściwości border-spacing zamiast text-indent.

Również, aby nieco wyjaśnić, w stylu elementu, Ustaw swoją wartość początkową:

#foo {
    border-spacing: 0px;
}

Następnie w części animate, twoja ostateczna wartość:

$('#foo').animate({  borderSpacing: -90 }, {
    step: function(now,fx) {
      $(this).css('transform','rotate('+now+'deg)');  
    },
    duration:'slow'
},'linear');
W moim przypadku obraca się o 90 stopni w lewo.

Oto demo na żywo .

 74
Author: atonyc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:27

Moim zdaniem, jQuery animate jest nieco nadużywane, w porównaniu do CSS3 transition, który wykonuje taką animację na dowolnej właściwości 2D lub 3D. Również obawiam się, że pozostawienie go do przeglądarki i zapominając o warstwie zwanej JavaScript może doprowadzić do oszczędzenia soku procesora - specjalnie, gdy chcesz wybuch z animacjami. Dlatego lubię mieć animacje, w których znajdują się definicje stylów, ponieważ definiujesz funkcjonalność za pomocą JavaScript . Im więcej prezentacji wstrzyknij do JavaScript, tym więcej problemów napotkasz później.

Wszystko, co musisz zrobić, to użyć addClass do elementu, który chcesz animować, gdzie ustawiasz klasę, która ma właściwości CSS transition. Możesz po prostu "aktywować" animację , która pozostaje zaimplementowana na czystej warstwie prezentacji.

.js

// with jQuery
$("#element").addClass("Animate");

// without jQuery library
document.getElementById("element").className += "Animate";

Można łatwo usunąć klasę z jQuery, lub usunąć klasę bez biblioteka .

.css

#element{
    color      : white;
}

#element.Animate{
    transition        : .4s linear;
    color             : red;
    /** 
     * Not that ugly as the JavaScript approach.
     * Easy to maintain, the most portable solution.
     */
    -webkit-transform : rotate(90deg);
}

.html

<span id="element">
    Text
</span>

Jest to szybkie i wygodne rozwiązanie dla większości przypadków użycia.

Używam tego również, gdy chcę zaimplementować inną stylizację (alternatywne właściwości CSS )i chcę zmienić styl w locie za pomocą globalnego.Animacja 5s. Dodaję nową klasę do BODY, mając alternatywny CSS w postaci to:

.js

$("BODY").addClass("Alternative");

.css

BODY.Alternative #element{
    color      : blue;
    transition : .5s linear;
}

W ten sposób można zastosować różne style z animacjami, bez ładowania różnych plików CSS. Włącza się tylko JavaScript, aby ustawić class.

 44
Author: Dyin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:03:02

Aby dodać do odpowiedzi Ryleya i atonyca, nie musisz używać prawdziwej właściwości CSS, takiej jak text-index lub border-spacing, ale zamiast tego możesz określić fałszywą właściwość CSS, taką jak rotation lub my-awesome-property. Dobrym pomysłem może być użycie czegoś, co nie ryzykuje, że stanie się rzeczywistą właściwością CSS w przyszłości.

Również ktoś zapytał, jak animować inne rzeczy w tym samym czasie. Można to zrobić jak zwykle, ale pamiętaj, że funkcja step jest wywoływana dla każdej animowanej właściwości, więc będziesz mieć aby sprawdzić swoją nieruchomość, w ten sposób:

$('#foo').animate(
    {
        opacity: 0.5,
        width: "100px",
        height: "100px",
        myRotationProperty: 45
    },
    {
        step: function(now, tween) {
            if (tween.prop === "myRotationProperty") {
                $(this).css('-webkit-transform','rotate('+now+'deg)');
                $(this).css('-moz-transform','rotate('+now+'deg)'); 
                // add Opera, MS etc. variants
                $(this).css('transform','rotate('+now+'deg)');  
            }
        }
    });

(uwaga: nie mogę znaleźć dokumentacji obiektu "Tween" w dokumentacji jQuery; na stronie dokumentacji programu animate znajduje się link do http://api.jquery.com/Types#Tween który jest sekcją, która wydaje się nie istnieć. Kod dla prototypu animacji można znaleźć na Github tutaj ).

 17
Author: skagedal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-31 14:27:45

Po prostu użyj przejść CSS:

$(element).css( { transition: "transform 0.5s",
                  transform:  "rotate(" + amount + "deg)" } );

setTimeout( function() { $(element).css( { transition: "none" } ) }, 500 );

Jako przykład ustawiłem czas trwania animacji na 0,5 sekundy.

Zwróć uwagę na setTimeout, Aby usunąć właściwość transition css po zakończeniu animacji (500 ms)


Dla czytelności pominąłem przedrostki vendora.

To rozwiązanie wymaga oczywiście obsługi przejścia przez przeglądarkę.

 6
Author: Paolo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-04 06:32:47

Natknąłem się na ten post, chcąc użyć transformacji CSS w jQuery do nieskończonej animacji pętli. Ten mi pasował. Nie wiem, jak profesjonalnie to wygląda.

function progressAnim(e) {
    var ang = 0;

    setInterval(function () {
        ang += 3;
        e.css({'transition': 'all 0.01s linear',
        'transform': 'rotate(' + ang + 'deg)'});
    }, 10);
}

Przykład użycia:

var animated = $('#elem');
progressAnim(animated)
 3
Author: Faradin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-29 16:31:17
//this should allow you to replica an animation effect for any css property, even //properties //that transform animation jQuery plugins do not allow

            function twistMyElem(){
                var ball = $('#form');
                document.getElementById('form').style.zIndex = 1;
                ball.animate({ zIndex : 360},{
                    step: function(now,fx){
                        ball.css("transform","rotateY(" + now + "deg)");
                    },duration:3000
                }, 'linear');
            } 
 1
Author: Colin Rickels,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-16 19:05:53