slick + анимация wow js

103
25 марта 2021, 06:20

Есть горизонтальный сайт который работает через slick и работает по блочно. Нужно чтобы, при скролле на следующий слайд запускалась анимация элементов на этом слайде, (facts-item-hint). Тут наглядный пример, как это должно работать https://lore1ei.github.io/ на первом слайде все нормально, а второй запускается вместе с первым, а должен только когда он находится в видимости окна браузера.

    <section class="slider">
        <article class="slider_item">
    <div class="header">
        <div class="wraper">
            <div class="logo">
                <img src="img/logo.png" alt="logo">
                <h1>SM-Marketing</h1>
            </div>
            <div class="first-page">
                <div class="method">
                    <h2>Методика №1</h2>
                    <p class="title-p" >по скоростному получению клиентов из интернета</p>
                    <p class="method-p">или <br> как с полного нуля, <br> всего через пару дней <br> начать получать первые заявки</p>
                </div>
                <div class="block-jq">
                    <div class="block-jq-item wow bounceInDown"><div>как найти новых клиентов</div></div>
                    <div class="block-jq-item wow bounceInRight"><div>как получать больше заявок</div></div>
                    <div class="block-jq-item wow bounceInUp"><div>как построить систему лидогенерации</div></div>
                </div>
            </div>
        </div>
    </div>
</article>
<article class="slider_item">
    <div class="facts">
        <div class="wraper wrap100">
            <div class="facts-item">
                <h2>Факт №1</h2>
                <div class="facts-item-hint wow bounceInDown" >Заявки  это сырьё для продаж <br>
                    Не будет заявок – не будет и продаж</div>
            </div>
            <div class="facts-item">
                <h2>Факт №2</h2>
                <div class="facts-item-hint wow bounceInDown" >Прямо сейчас ваши конкуренты используют маркетинговые <br>
                    инструментыи поэтому у них всё впорядке с клиентами </div>
            </div>
        </div>
    </div>
</article>
    </section>

Тут Css слайдера

.slider 
    width: 100%
    height: 100vh
.slick-list,
.slick-track 
    width: 100%
    height: 100%
.slider__item 
    width: 100%
    height: 100%

Тут как работает сам сайт на слайдере

$(function () {
    $('.slider').slick({
      infinite: false,
      arrows: false
    });
    $('.slider').mousewheel(function (e) {
      if (e.deltaY !== 1) {
        $('.slider').slick('slickNext');
      } else {
        $('.slider').slick('slickPrev');
      }
      e.preventDefault();
    });
  });

Пробывал с оффсетом на вертикальной прокрутки он работает нормально, а на горизонтальной все элементы сразу запускают анимацию.

<script>
        new WOW({
                offset: 100 }).init();
</script>
Answer 1

Оригинал тут - codepen.io/joxxce

Пример именно для Вашего слайдера:

$('.slider').on('init', function(e, slick) { 
  var $firstEl = $('.slider_item:first-child').find('[data-animation]'); 
  doAnimation($firstEl);     
}); 
$('.slider').on('beforeChange', function(e, slick, currentSlide, nextSlide) { 
  var $animationEl = $('.slider_item[data-slick-index="' + nextSlide + '"]').find('[data-animation]'); 
  doAnimation($animationEl);     
}); 
 
$('.slider').slick({ 
  infinite: false, 
  arrows: false, 
}); 
 
 
$('.slider').mousewheel(function (e) { 
  if (e.deltaY !== 1) { 
    $('.slider').slick('slickNext'); 
  } else { 
    $('.slider').slick('slickPrev'); 
  } 
 
  e.preventDefault(); 
}); 
 
 
function doAnimation(elements) { 
  var animationEndEvents = 'webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend'; 
  elements.each(function() { 
    var $this = $(this); 
    var $animationDelay = $this.data('delay'); 
    var $animationType = 'animated ' + $this.data('animation'); 
    $this.css({ 
      'animation-delay': $animationDelay, 
      '-webkit-animation-delay': $animationDelay 
    }); 
    $this.addClass($animationType).one(animationEndEvents, function() { 
      $this.removeClass($animationType); 
    }); 
  }); 
} 
 
// new WOW({ 
//   offset: 100  
// }).init();
* { 
  box-sizing: border-box; 
} 
 
html, 
body { 
  padding: 0; 
  margin: 0; 
 
  width: 100%; 
  height: 100%; 
} 
 
.slider, 
.slick-list, 
.slick-track, 
.slider__item { 
  width: 100%; 
    height: 100vh; 
}
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.7.2/animate.min.css" /> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> 
<link rel="stylesheet" href="https://cdn.jsdelivr.net/jquery.slick/1.5.7/slick.css" /> 
<script src="https://cdn.jsdelivr.net/jquery.slick/1.5.7/slick.min.js" ></script> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/wow/1.1.2/wow.min.js" ></script> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-mousewheel/3.1.13/jquery.mousewheel.min.js" ></script> 
 
<section class="slider"> 
 
  <article class="slider_item"> 
    <div class="header"> 
      <div class="wraper"> 
        <div class="logo"> 
          <img src="img/logo.png" alt="logo"> 
          <h1>SM-Marketing</h1> 
        </div> 
        <div class="first-page"> 
          <div class="method"> 
            <h2>Методика №1</h2> 
            <p class="title-p" >по скоростному получению клиентов из интернета</p> 
            <p class="method-p">или <br> как с полного нуля, <br> всего через пару дней <br> начать получать первые заявки</p> 
          </div> 
          <div class="block-jq"> 
            <div class="block-jq-item" data-animation="bounceInDown" data-delay="0.3s"><div>как найти новых клиентов</div></div> 
            <div class="block-jq-item" data-animation="bounceInRight" data-delay="0.3s"><div>как получать больше заявок</div></div> 
            <div class="block-jq-item" data-animation="bounceInUp" data-delay="0.3s"><div>как построить систему лидогенерации</div></div> 
          </div> 
        </div> 
      </div> 
    </div> 
  </article> 
 
  <article class="slider_item"> 
    <div class="facts"> 
      <div class="wraper wrap100"> 
        <div class="facts-item"> 
          <h2>Факт №1</h2> 
          <div class="facts-item-hint" data-animation="bounceInDown" data-delay="0.3s">Заявки  это сырьё для продаж <br> 
            Не будет заявок – не будет и продаж</div> 
        </div> 
        <div class="facts-item"> 
          <h2>Факт №2</h2> 
          <div class="facts-item-hint" data-animation="bounceInDown" data-delay="0.3s">Прямо сейчас ваши конкуренты используют маркетинговые <br> 
            инструментыи поэтому у них всё впорядке с клиентами </div> 
        </div> 
      </div> 
    </div> 
  </article> 
</section>

Суть в том, что плагин wow тут не используется, а используется только animate.css.

READ ALSO
Возможно ли подключить дебаг frontend&#39;а к Intellij Idea?

Возможно ли подключить дебаг frontend'а к Intellij Idea?

К примеру я разрабатываю продукт на angular 1Есть ли возможность, чтобы не открывать "инструменты разработчика" в браузере, а непосредственно...

83
Применение паттернов в canvas

Применение паттернов в canvas

Я создаю фон, который почему-то перекрывает позже созданный мною паттернНе могу понять, как сделать наоборот

87
Почему не работает change в форме?

Почему не работает change в форме?

Вот часть формыНужно сохранять выбранные значения в localStorage

86
javascript получить GET параметр

javascript получить GET параметр

Нужно получить из урл значение get параметра "data", каким образом это можно реализовать?

97