Итак, поехали ...
Прежде всего я отделил анимацию от самого селектора и создал совершенно новый класс, который содержит только информацию об анимации, и добавил свойство animation-fill-mode:forwards
, чтобы анимация заканчивалась на ключевом кадре 100%. Я добавил это, чтобы исходный класс имел opacity:0
:
CSS:
.slick-slide:nth-child(odd) {
opacity:0;
}
.slick-slide.anim:nth-child(odd) {
-webkit-animation-name: fadeInLeft;
-moz-animation-name: fadeInLeft;
-o-animation-name: fadeInLeft;
animation-name: fadeInLeft;
-webkit-animation-duration: 1s;
-moz-animation-duration: 1s;
-o-animation-duration: 1s;
animation-duration: 1s;
-webkit-animation-delay: 1s;
-moz-animation-delay: 1s;
-o-animation-duration: 1s;
animation-delay: 1s;
-webkit-animation-fill-mode:forwards; // added
animation-fill-mode:forwards; // added
}
Тогда вам нужен этот Javascript:
$(window).on('load scroll', function() {
var scrollTop = $(window).scrollTop(),
windowHeight = $(window).height(),
threshold = 200;
$('.slick-slide:nth-child(odd)').each(function() {
var offTop=$(this).offset().top;
if ((scrollTop+windowHeight) > offTop) { // you can add -threshold here as scrollTop+windowHeight-threshold in pixels
$(this).addClass('anim');
}
});
});
Что делает Javascript: как только один из классов селектора появится на экране - вычисляя окно scrollTop
минус окно height
, тогда класс anim
применяется к селектору. Я также добавил необязательную переменную threshold
, которую вы можете использовать для изменения точки, где запускается анимация - например, 200px на экране.
Я добавил некоторые стили к элементам slick-slide
в примере, чтобы некоторые из них изначально были за кадром.
Вот рабочая скрипка.
https://jsfiddle.net/tun51xq6/1/