Aynı anda birden fazla CSS animasyonu oynatın


120

İki CSS animasyonunun farklı hızlarda oynatılmasını nasıl sağlayabilirim ?

  • Görüntü aynı anda dönüyor ve büyüyor olmalıdır.
  • Dönüş her 2 saniyede bir dönecektir.
  • Büyüme her 4 saniyede bir dönecektir.

Örnek Kod:

.image {
    position: absolute;
    top: 50%;
    left: 50%;
    width: 120px;
    height: 120px;
    margin:-60px 0 0 -60px;
    -webkit-animation:spin 2s linear infinite;
    -webkit-animation:scale 4s linear infinite;
}

@-webkit-keyframes spin { 
    100% { 
        transform: rotate(180deg);
    } 
}

@-webkit-keyframes scale {
    100% {
         transform: scaleX(2) scaleY(2);
    }
}

http://jsfiddle.net/Ugc5g/3388/ - yalnızca bir animasyon (son bildirilen) oynatılır.


Görüntü dönerken ölçeklenmeli mi? Verdiğim cevap değil, ancak ihtiyacınız olan şey buysa, bunu yapmak için
ince ayar yapılabilir

Yanıtlar:


154

TL; DR

Virgül kullanarak, aşağıdaki CriticalError yanıtında belirtildiği gibi her biri kendi özelliklerine sahip birden çok animasyon belirtebilirsiniz.

Misal:

animation: rotate 1s, spin 3s;

Orijinal cevap

Burada iki konu var:

# 1

-webkit-animation:spin 2s linear infinite;
-webkit-animation:scale 4s linear infinite;

İkinci satır, birincinin yerini alır. Yani hiçbir etkisi yok.

# 2

Her iki anahtar kare de aynı özellik için geçerlidir transform

Alternatif olarak, görüntüyü bir içine sarabilir <div>ve her birini ayrı ayrı ve farklı hızlarda canlandırabilirsiniz .

http://jsfiddle.net/rnrlabs/x9cu53hp/

.scaler {
    position: absolute;
    top: 100%;
    left: 50%;
    width: 120px;
    height: 120px;
    margin:-60px 0 0 -60px;
    animation: scale 4s infinite linear;    
}

.spinner {
    position: relative;
    top: 150px;
    animation: spin 2s infinite linear;
}


@keyframes spin { 
    100% { 
        transform: rotate(180deg);
    } 
}

@keyframes scale {
    100% {
         transform: scaleX(2) scaleY(2);
    }
}
<div class="spinner">
<img class="scaler" src="http://makeameme.org/media/templates/120/grumpy_cat.jpg" alt="" width="120" height="120">
<div>


216

Yeni birinin gelmesi ve bu diziyi yakalaması durumunda, virgülle her biri kendi özelliklerine sahip birden çok animasyon belirtebilirsiniz.

Misal:

animation: rotate 1s, spin 3s;

3
Teşekkürler, bu çok daha basit bir çözüm
Sergey Rotbart

12
Cehennem evet virgül!
Zachary Dahan

4
peki ya farklı animasyon gecikmeleri?
küçük minik adam

1
@ little-tiny-man animation-delaykoma yoluyla da çoklu belirtebilirsiniz , bu yanıta
Klesun

35

Aynı anda birden fazla animasyon çalıştırabilirsiniz, ancak örneğinizde iki sorun var. İlk olarak, kullandığınız sözdizimi yalnızca bir animasyonu belirtir. İkinci stil kuralı ilkini gizler. Aşağıdaki gibi sözdizimini kullanarak iki animasyon belirtebilirsiniz:

-webkit-animation-name: spin, scale
-webkit-animation-duration: 2s, 4s

bu kemanta olduğu gibi (aşağıda açıklanan diğer sorundan dolayı "ölçek" i "solmaya" değiştirdim ... Benimle birlikte ol.): http://jsfiddle.net/rwaldin/fwk5bqt6/

İkinci olarak, her iki animasyonunuz da aynı DOM öğesinin aynı CSS özelliğini (dönüşümü) değiştirir. Bunu yapabileceğine inanmıyorum. Farklı öğeler üzerinde iki animasyon belirtebilirsiniz, görüntü ve belki bir kap öğesi. Bu keman gibi, animasyonlardan birini kaba uygulayın: http://jsfiddle.net/rwaldin/fwk5bqt6/2/


İsmi virgülle ayırdığımız için birden fazla animasyon yapabileceğimizi belirttiğiniz için teşekkür ederiz.
Zachary Dahan

3

Öznitelik yalnızca bir kez tanımlanabildiğinden iki animasyon oynatamazsınız. Bunun yerine neden ikinci animasyonu ilkine dahil etmiyorsunuz ve zamanlamayı doğru yapmak için ana kareleri ayarlamıyorsunuz?

.image {
    position: absolute;
    top: 50%;
    left: 50%;
    width: 120px;
    height: 120px;
    margin:-60px 0 0 -60px;
    -webkit-animation:spin-scale 4s linear infinite;
}

@-webkit-keyframes spin-scale { 
    50%{
        transform: rotate(360deg) scale(2);
    }
    100% { 
        transform: rotate(720deg) scale(1);
    } 
}
<img class="image" src="http://makeameme.org/media/templates/120/grumpy_cat.jpg" alt="" width="120" height="120">


2
kullanıcı "farklı hızlarda" için
asekd

Farklı hızlarda döndürme 2 saniyede olurken ölçek 4 saniyede gerçekleşir çünkü iki animasyon ifadesi yazmak işe yaramadığı için anahtar kareler aracılığıyla zamanlamayı hallettim.
Ram G Athreya

Aynı anda iki dönüşüm animasyonunu oynatamayacağınız doğru olsa da (çünkü bir dönüşüm diğerinin üzerine yazacaktır), "Öznitelik yalnızca bir kez tanımlanabildiğinden iki animasyon oynatamazsınız" demek doğru değildir. Animasyonlarda virgülle ayrılmış değerler kullanma hakkında kabul edilen yanıta bakın.
Justin Taddei

2

bunun gibi bir şey deneyebilirsin

ebeveyni rotateve görüntüyü ayarlayın, scaleböylece rotateve scalezaman farklı olabilir

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.