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)'
});
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)');
}
...
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.
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
.
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 ).
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ę.
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)
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');
}
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