2015-09-10 12 views
5

Sarma noktası söz konusu olduğunda, animasyon eklemeye nasıl animasyon ekleyebiliriz?

belki bu yardımcı olabilir:

bir başlığa sahip ve bu başlığın içine biz esnek özn kabı var ve biz tarayıcısı olanlar yüksekliğini değiştirirken biz alttan üste bizim tarayıcıyı yeniden boyutlandırmak veya yön sütundur öğe aniden bu kullanarak JQuery yapabileceğiniz, sadece bu tek başına CSS ile yapılamaz iken bu event.thx

<header> 
     <div class="container"> 
      <div class="item1 item"></div> 
      <div class="item2 item"></div> 
      <div class="item3 item"></div></div></header> 


header { 
     width: 200vw; 
     max-height: 100vh ; 
    } 


.container{ 
     display: flex; 
     max-height:100vh; 
     flex-direction: column; 
     flex-wrap: wrap; 
     align-content:flex-start; 
} 



.item1 { 
    background-color: red; 
    height: 200px; 
    flex: 1 0 150px; 
} 


.item2 { 
    background-color: blue; 
    height: 200px; 
    flex: 1 0 150px; 

} 


.item3 { 
    background-color: orange; 
    height: 200px; 
    flex: 1 0 150px; 

} 
+0

Bildiğim kadarıyla, bu mümkün değil – vals

+1

Hayır ... 'flex-wrap' [** animatable değil **] (https://developer.mozilla.org/en-US/docs/Web/CSS/esnek-wrap). Sarma davranışı artık uygun değil ve 'flexbox' bunu değiştirmeyecek. –

cevap

3

animasyon eklemek istiyorum yeniden şekillendirmek. Satırlar kullanarak bir flexbox'a bakarken, yeni bir satır oluşturulduğunda veya kaldırıldığında, flexbox yüksekliğini değiştirecektir. Bunu bildiğinizde, bir pencerenin yeniden boyutlandırılmasının esnek kutunun yüksekliğini değiştirip değiştirmediğini test etmek için sayfaya bir .resize() işlevi ekleyebiliriz. Varsa, bir animasyon yürütebilirsiniz. Bir örnek oluşturdum JFiddle here.

$(document).ready(function() { 
var height = $('.container').css('height'); 
var id; 
$(window).resize(function() { 
    clearTimeout(id); 
    id = setTimeout(doneResizing, 500); 
}); 
function doneResizing() { 
     var newheight = $('.container').css('height'); 
    if (newheight != height) { 
     $('.item').fadeOut(); 
     $('.item').fadeIn(); 
     height = newheight; 
    } 
    } 
}); 

Şimdi sütunlarını kullanarak bir flexbox'a ile biz genişliğinde bir değişiklik meydana geldiğinde algılamak gerekir: Burada

bu işi yapan bir koddur. Bu, flexbox genişliğinin varsayılan olarak bir blok stili eleman olduğu için maksimum tahsis edilen genişliği alacağı için biraz daha zordur. Bunu başarmak için, ekranı kullanarak bir inline flexbox olarak ayarlamanız gerekir: inline-flex veya en fazla içeriğinin genişliğine eşit olan flexbox için maksimum genişlik ayarlayın. Bunlardan birini belirledikten sonra, yükseklik kodunun genişlikteki değişimlerini algılamak için, yukarıdaki gibi aynı kodu kullanabilirsiniz.

Bu değişiklikler, yeniden boyutlandırmadaki tüm öğelere bir animasyon uyguladı. Yalnızca onu satır/sütun değiştiren öğeye uygulamak isterseniz ne olur? Bu daha fazla çaba gerektirir, ancak yapılabilir. Animasyonu genişlik/yüksekliğe göre uygulamak için hangi esnek öğeyi yakalayacağınızı öğrenmek için javascript/jquery kodunuzda çok sayıda if ifadesi yazmanız gerekir.

+0

iyi Fikir, ancak JFiddle'ınızın daha fazla çalışmaya ihtiyacı var, düzgün çalışmıyor –

+0

@mehrdad Hataları düzeltmekten mutluluk duyarız ancak JSFiddle'takilerin düzgün çalışmamasını açıklayabilir misiniz? Flexbox'taki nesneler her yeniden şekillendiğinde, kutular kaybolur ve daha sonra geri döner. Burada çalışan bir screencast görebilirsiniz: http://take.ms/k7wyR - lütfen bana bildirin. –

+0

Sanırım https://css-tricks.com/animated-media-queries/ bu sitede olduğu gibi breakpoint için animasyon gibi bir şeye ihtiyacım var ama şimdi biz medya sorguları yerine flex-wrap var –