2012-12-23 36 views
19

Czy można animować właściwość CSS, którą można przetłumaczyć za pomocą jquery?Jak animować CSS Przetłumaczyć

$('.myButtons').animate({"transform":"translate(50px,100px)"}) 

i czy działa w wielu przeglądarkach?

Demo nie działa: http://jsfiddle.net/ignaciocorreia/xWCVf/

UPDATE:

Moje rozwiązania:

  1. proste implementacje - http://jsfiddle.net/ignaciocorreia/R3EaJ/
  2. Kompleksowa realizacja i multi-browser - http://ricostacruz.com/jquery.transit/
+0

Wezmę przypuszczenie, i powiedzieć, że to działa tylko w przeglądarkach WebKit, jeśli w ogóle! – adeneo

+0

Znalazłem ten przykład: http://jsfiddle.net/qGEmy/7/, ale wydaje mi się, że nie działa on z moim przykładem. –

+1

A oto jak to zrobić -> [** FIDDLE **] (http: // jsfiddle.net/adeneo/xWCVf/2 /) – adeneo

Odpowiedz

7
$('div').css({"-webkit-transform":"translate(100px,100px)"});​ 

http://jsfiddle.net/xWCVf/5/

+0

To jest pomysł, ale z animacją. Czy możesz to zaktualizować? –

+1

Wystarczy dodać przejście CSS do niego. –

+0

@ IgnácioR.Correia - Zaktualizowany link –

7

Istnieje jQuery wtyczki, które pomogą Ci osiągnąć jak: http://ricostacruz.com/jquery.transit/

+2

Spróbujmy. Chciałem tylko dodać jedną linię kodu do mojej witryny. Nie wymaga całej biblioteki. –

+1

@ IgnácioR.Correia Jeśli szukasz rozwiązania opartego na różnych przeglądarkach, myślę, że wtyczka/biblioteka jest drogą do zrobienia. Poza tym z jQuery już korzystasz z biblioteki. – flec

+0

Już się z tym bawię. Bardzo fajny. Działa jak marzenie. Dzięki. –

4

Według CanIUse powinieneś mieć go z wieloma prefiksów.

$('div').css({ 
    "-webkit-transform":"translate(100px,100px)", 
    "-ms-transform":"translate(100px,100px)", 
    "transform":"translate(100px,100px)" 
    });​ 
+2

Od wersji jQuery 1.8 nie trzeba już określać prefiksów dostawcy. http://api.jquery.com/css/#css2 – davidgoli

+3

Oryginalny plakat zapytał o * animację *, której ten kod nie zawiera. –

-1

Potrzebujesz ustawić animację klatek kluczowych w swoim CSS. I użyć klatkę z jQuery:

$('#myTest').css({"animation":"my-animation 2s infinite"});
#myTest { 
 
    width: 50px; 
 
    height: 50px; 
 
    background: black; 
 
} 
 

 
@keyframes my-animation { 
 
    0% { 
 
    background: red; 
 
    } 
 
    50% { 
 
    background: blue; 
 
    } 
 
    100% { 
 
    background: green; 
 
    } 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="myTest"></div>

+0

Niestety to nie odpowiada na oryginalne pytanie dotyczące animacji 'transform: translate()' w szczególności. –

0

Ja też szukałem dobrej drodze, aby to zrobić, znalazłem najlepszym sposobem było ustawić przejście na „przekształcić” nieruchomości, a następnie zmień transformację, a następnie usuń przejście.

kładę to wszystko razem w plugin jQuery

https://gist.github.com/dustinpoissant/8a4837c476e3939a5b3d1a2585e8d1b0

byłoby użyć kodu:

$("#myElement").animateTransform("rotate(180deg)", 750, function(){ 
    console.log("animation completed after 750ms"); 
}); 
1

Jest ciekawy sposób, który może być osiągnięty za pomocą jQuery animate metoda w unikalny sposób, w której wywołuje się metodę animate w obiekcie javascript, który opisuje wartość from, a następnie przekazuje się jako pierwszy parametr inny obiekt js w hich opisuje wartość to oraz funkcję step, która obsługuje każdy krok animacji zgodnie z wartościami opisanymi wcześniej.

Przykład - Animowanie przekształcić translateY:

var $elm = $('h1'); // element to be moved 
 

 
function run(v){ 
 
    // clone the array (before "animate()" modifies it), and reverse it 
 
    var reversed = JSON.parse(JSON.stringify(v)).reverse(); 
 
    
 
    $(v[0]).animate(v[1], { 
 
     duration: 500, 
 
     step: function(val) { 
 
      $elm.css("transform", `translateY(${val}px)`); 
 
     }, 
 
     done: function(){ 
 
      run(reversed) 
 
     } 
 
    }) 
 
}; 
 

 
// "y" is arbitrary used as the key name 
 
run([{y:0}, {y:80}])
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<h1>jQuery animate <pre>transform:translateY()</pre></h1>