Анимированая перестановка блоков

376
26 ноября 2016, 18:51

Сделал перестановку двух блоков по клику с flexbox ниже.

Есть ли какой-то способ это анимировать? Может быть даже с функциями плавности(easing).

$('#swap').click(function() { 
	$('.swap0').toggleClass('swap1'); 
});
.bk1 { 
    background: #f00; 
    width: 100px; 
    height: 100px; 
} 
.bk2 { 
    background: #0f0; 
    width: 100px; 
    height: 100px; 
} 
 
.swap0 { 
	display: flex; 
	transition: 2s; 
	flex-direction: column; 
} 
 
.swap1 { 
	flex-direction: column-reverse; 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> 
<div class="wrap swap0"> 
	<div class="bk1"> 
 
	</div> 
	<div class="bk2"> 
 
	</div> 
</div> 
 
<a id="swap">SWAP THIS</a>

Answer 1

Есть способ без флекса:

$('#swap').click(function(e) { 
  e.preventDefault(); 
	$('.swap0').toggleClass('swap1'); 
});
.bk1 { 
    background: #f00; 
    width: 100px; 
    height: 100px; 
   
    transition: all 1s ease-in-out; 
    position: absolute; 
    top: 0; 
} 
 
.bk2 { 
    background: #0f0; 
    width: 100px; 
    height: 100px; 
   
    transition: all 1s ease-in-out; 
    position: absolute; 
    top: 100px; 
} 
 
.swap0 { 
	height: 200px; 
    width: 100px; 
    position: relative; 
} 
 
 
.swap1 .bk1 { 
	top: 100px; 
} 
.swap1 .bk2 { 
	top: 0px; 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> 
<div class="wrap swap0"> 
	<div class="bk1"> 
 
	</div> 
	<div class="bk2"> 
 
	</div> 
</div> 
 
<a href="#" id="swap">SWAP THIS</a>

Answer 2

вариант анимированной смены для flex, блоки желательно одинаковой высоты

$('#swap').click(function(event) { 
  event.preventDefault() 
  $('.swap0').toggleClass('swap1'); 
});
.bk1 { 
  background: #f00; 
  width: 100px; 
  height: 100px; 
  animation-duration: 1.25s; 
  animation-fill-mode: forwards; 
  animation-name: slideOut; 
} 
.bk2 { 
  background: #0f0; 
  width: 100px; 
  height: 100px; 
  animation-duration: 1.25s; 
  animation-fill-mode: forwards; 
  animation-name: slideIn; 
} 
.swap0 { 
  display: flex; 
  flex-direction: column; 
} 
@keyframes slideIn { 
  0% { 
    transform: translateY(-100%); 
  } 
  100% { 
    transform: translateY(0); 
  } 
} 
@keyframes slideOut { 
  0% { 
    transform: translateY(100%); 
  } 
  100% { 
    transform: translateY(0); 
  } 
} 
.swap1 .bk1 { 
  animation-name: slideIn; 
  order: 2; 
} 
.swap1 .bk2 { 
  animation-name: slideOut; 
  order: 1; 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<div class="wrap swap0"> 
  <div class="bk1"> 
 
  </div> 
  <div class="bk2"> 
 
  </div> 
</div> 
 
<a id="swap">SWAP THIS</a>

READ ALSO
При верстке макета блоки смешались

При верстке макета блоки смешались

Верстаю лендинг и один блок упрямо лезет на предыдущий, вместо того, чтобы идти за ним

302
Аккордеон в jquery

Аккордеон в jquery

Как сделать, чтобы появляющийся текст вылазил наверх?

364
Код для аккордеона

Код для аккордеона

Подскажите, пожалуйста, как сделать аккордеон подобного плана, в тупик ставит не только код для javascript, но и что писать в html и css тоже не понимаю

391
Переключение слайдов в bootstrap

Переключение слайдов в bootstrap

Не понимаю почему сдвигаются вниз кнопки выбора слайдов:

407