2016-09-28 8 views
0

最近Swiper.jsを取り上げました。私はスライドショーをすることにしました。これらは素晴らしいです。今度は、すべてのスライド内の要素を別々にアニメーション化したいと思ったので、Swiper.jsによって提供されたコールバックを使用するのが最良の方法だと思いました。スワイパーコールバックとJqueryを使用してスライドショー内の要素をアニメ化する

非常に最初のスライドはうまく動作しますが、次のスライダに移動する(または最初のスライダに戻る)と、アニメーションが不安定になるようです。イメージがアニメーション状態で最初に表示され、その後再びアニメーション表示されているかのようです。

私はこの問題を示すために、コードスニペットを作っ:

html, body { 
 
     position: relative; 
 
     height: 100%; 
 
    } 
 
    body { 
 
     background: url(../../img/BannerEmpty.png); 
 
     background-repeat: no-repeat; 
 
     background-size: cover; 
 
     font-family: Helvetica Neue, Helvetica, Arial, sans-serif; 
 
     font-size: 14px; 
 
     color:#000; 
 
     margin: 0; 
 
     padding: 0; 
 
     text-align:center; 
 
    } 
 

 
    p { 
 
     font-family: 'Architects Daughter', cursive; 
 
     font-size: 40px; 
 
     justify-content: flex-start; 
 
     color: #3C3C3B; 
 
    } 
 
    .swiper-container { 
 
     width: 100%; 
 
     height: 100%;   
 
     
 
     
 
    } 
 
    .swiper-slide { 
 
     text-align: center; 
 
     font-size: 18px; 
 
     
 
     
 
     
 
     margin:auto; 
 
     /* Center slide text vertically */ 
 
     display: -webkit-box; 
 
     display: -ms-flexbox; 
 
     display: -webkit-flex; 
 
     display: flex; 
 
     -webkit-box-pack: center; 
 
     -ms-flex-pack: center; 
 
     -webkit-justify-content: center; 
 
     justify-content: center; 
 
     -webkit-box-align: center; 
 
     -ms-flex-align: center; 
 
     -webkit-align-items: center; 
 
     align-items: center; 
 
    } 
 

 
#swipeLeft { 
 
     margin: 0 20px 0 0 
 
} 
 

 
#swipeRight { 
 
     margin: 0 0 0 20px 
 
}
<link href="http://brickhunters.ddns.net/swiperslider/dist/css/swiper.min.css" rel="stylesheet"/> 
 
<link href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.5.2/animate.min.css" rel="stylesheet"/> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<html> 
 
    <head> 
 
     <meta charset="utf-8"> 
 
     <title>Test animations in Swiper</title> 
 
     <link href="https://fonts.googleapis.com/css?family=Architects+Daughter|Archivo+Black" rel="stylesheet"> 
 
    </head> 
 
    <body> 
 
     <!-- Swiper --> 
 
     <div class="swiper-container"> 
 
      <div class="swiper-wrapper"> 
 
       <div class="swiper-slide"> 
 
        <p id="swipeLeft">Slide from left!</p> 
 
        <p id="swipeRight">Slide from right!</p> 
 
       </div> 
 
       <div class="swiper-slide"> 
 
        <p id="swipeLeft">Why wont you work!</p> 
 
        <p id="swipeRight">Argh #$!?%#@&=</p> 
 
       </div> 
 
       <div class="swiper-slide"> 
 
       <img width="250px"id="swipeLeft" src="http://www.memes.at/faces/tears_in_the_eyes.jpg"></img> 
 
       <img width="250px" id="swipeRight" src="http://www.memes.at/faces/tears_in_the_eyes.jpg"></img> 
 
       </div> 
 
        
 
        
 
       </div> 
 
      <!-- Add Pagination --> 
 
      <div class="swiper-pagination"></div> 
 
      <!-- Add Arrows --> 
 
      
 
     </div> 
 
    
 
     <!-- Swiper JS --> 
 
     <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script> 
 
     <script src="http://brickhunters.ddns.net/swiperslider/dist/js/swiper.min.js"></script> 
 
     <!-- Initialize Swiper --> 
 
     <script> 
 
      
 
     var swiper = new Swiper('.swiper-container', { 
 
      pagination: '.swiper-pagination', 
 
      paginationClickable: true, 
 
      spaceBetween: 30, 
 
      centeredSlides: true, 
 
      autoplay: 3000, 
 
      autoplayDisableOnInteraction: false, 
 
      loop: true, 
 
      onSlideChangeStart: function (s) { 
 
       var currentSlide = $(s.slides[s.activeIndex]); 
 
       currentSlide.find('#swipeLeft').removeClass('animated slideInLeft'); 
 
       currentSlide.find('#swipeRight').removeClass('animated slideInRight'); 
 
       
 
      }, 
 
      onSlideChangeEnd: function (s) { 
 
       var currentSlide = $(s.slides[s.activeIndex]); 
 
       currentSlide.find('#swipeLeft').addClass('animated slideInLeft'); 
 
       currentSlide.find('#swipeRight').addClass('animated slideInRight');  
 
      } 
 
     }); 
 
      
 
     </script> 
 
    </body> 
 
    </html>

もペン:http://codepen.io/RexDesign/pen/NRgJWy

何1は、滑らかなアニメーションを実現するために行うために必要ありませんこの場合?

事前に感謝します。

答えて

0

<p id="workStartPhrase" class="animated delay200ms fatten" data-animation="flipInY">Waarom zou ik?</p> 

が、その後

var animEndEv = 'webkitAnimationEnd animationend'; 

var swiper = new Swiper('.swiper-container', { 
    pagination: '.swiper-pagination', 
    paginationClickable: true, 
    spaceBetween: 30, 
    centeredSlides: true, 
    autoplay: 0, 
    autoplayDisableOnInteraction: false, 
    loop: true, 
    onSlideChangeStart: function(s) { 
     var currentSlide = $(s.slides[s.activeIndex]); 
     var elems = currentSlide.find(".animated") 
     elems.each(function() { 
      var $this = $(this); 
      var animationType = $this.data('animation'); 
      $this.addClass(animationType, 100).on(animEndEv, function() { 
       $this.removeClass(animationType); 
      }); 
     }); 

    }, 
    onSlideChangeEnd: function(s) { 
     var currentSlide = $(s.slides[s.activeIndex]); 

    } 
}); 
...などなど、swiperスライダーオプションを追加して、例えばHTMLのカスタムデータ属性でクラスをアニメーション追加
関連する問題