2017-06-21 21 views
0

更新:コードを更新し、達成したいことを明確にするための良い例を追加しました。jQuery CSS - Sliderアニメーション

jQueryを使用してスライダーを構築しました。 私は各要素に、隠し要素を表示するクラス.activeを与えます。

スワイプアニメーションが必要なので、画像は左から右に表示されます。

問題は、すでに複雑なコードがあり、その達成方法がわかりません。ここで

は私が達成したいものの例である:ここではhttps://bootsnipp.com/snippets/Padax

は、あなたがこのような何かを行うことができ、コード

https://codepen.io/Insane415/pen/NggLxe

<div class="slider"> 
    <div class="row"> 
    <div class="col-md-4"> 
     <div class="image-holder"> 
     <img src="http://via.placeholder.com/350x150" style="display:none;" class="active"> 
     <img src="http://via.placeholder.com/350x150" style="display:none;"> 
     <img src="http://via.placeholder.com/350x150" style="display:none;"> 
     <img src="http://via.placeholder.com/350x150" style="display:none;"> 
     </div> 
     <div class="bullet-points"> 
     <a href="_self" class="active-bullet">•</a> 
     <a href="_self">•</a> 
     <a href="_self">•</a> 
     <a href="_self">•</a> 
     </div> 
    </div> 
    <div class="col-md-2"> 
     <div class="thumbnails"> 
     <img src="http://via.placeholder.com/350x150" class="active-thumbnail"> 
     <img src="http://via.placeholder.com/350x150"> 
     <img src="http://via.placeholder.com/350x150"> 
     <img src="http://via.placeholder.com/350x150"> 
     </div> 
    </div> 
    <div class="col-md-6 center-me" style="height:100%;"> 
     <div class="text-holder"> 
     <div class="text active"> 
      <p>Lorem Ipsum</p> 
      <h2>Giant Heading 1</h2> 
      <p>Just some more text</p> 
      <a href="/de/tariffinder" class="button">zur Preisübersicht</a> 
     </div> 
     <div class="text"> 
      <p>Lorem Ipsum</p> 
      <h2>Giant Heading 2</h2> 
      <p>Some more text</p> 
      <a href="/de/tariffinder" class="button">zur Preisübersicht</a> 
     </div> 
     <div class="text"> 
      <p>Lorem Ipsum</p> 
      <h2>Giant Heading 3</h2> 
      <p>Some more text</p> 
      <a href="/de/tariffinder" class="button">zur Preisübersicht</a> 
     </div> 
     <div class="text"> 
      <p>Lorem Ipsum</p> 
      <h2>Giant Heading 4</h2> 
      <p>Some more text</p> 
      <a href="/de/tariffinder" class="button">zur Preisübersicht</a> 
     </div> 
     </div> 
    </div> 

    </div> 

.text-holder .text p{margin: 0!important;} 
.slider{ 
    padding: 15px; 
    margin-top: 50px; 
    background: url('/images/content/slider/Banner_Hintergrund_telbes-01.jpg'); 
    background-repeat: no-repeat!important; 
    background-size: cover!important; 
    display: inline-block; 
    width: 100%; 
    border: 1px solid #ddd; 
} 

.slider .bullet-points a{ 
    color: #ccc; 
} 

.thumbnails{ 

    height: 195.11px; 
    margin-left: -25px; 
} 

.thumbnails img{ 
    display:block; 
    max-height: 31.65%; 
    margin-bottom: 5px; 
} 

.thumbnails img:hover{ 
    cursor: pointer; 
} 

.text-holder{ 
    margin-left: 0px; 
    height: 100%; 
} 

.text-holder .text{ 
    display: none; 
} 

/*display active image*/ 

.active{ 
    display: block!important; 
} 

/*hide thumbnail when image is active*/ 

.active-thumbnail{ 
    display: none!important; 
} 

.bullet-points{ 
    display: block; 
    text-align: center; 
    margin-top: 15px; 
} 

.bullet-points a{ 
    font-size: 40px; 
    text-decoration: none; 
    color: #ccc; 
} 

.active-bullet{ 
    color: #E22C26!important; 
} 

/*.image-holder{ 
    max-width: 350px!important; 
} 

.image-holder img{ 
    max-width: 350px!important; 
}*/ 

.image-holder img{ 
    /* text-align: center!important; */ 
    margin: 0 auto; 
} 

.bullet-points a:hover{ 
    color: #E22C26!important; 
} 

.center-me{ 
    margin-top: 4%; 
} 

.text-holder a{ 
    margin-top: 15px; 
    padding: 10px 20px 10px 20px; 
} 

.text-holder a:hover{ 
    padding:10px 20px 10px 20px; 
} 

.text-holder{ 
    font-size: 130%; 
    color: inherit; 
} 

.text-holder h2{ 
    font-size: 200%; 
} 

    $(document).ready(function() { 

    var images = [$(".image-holder img:first-child"), $(".image-holder img:nth-of-type(2)"), $(".image-holder img:nth-of-type(3)"), $(".image-holder img:last-child")]; 
    var thumbnails = [$(".thumbnails img:first-child"), $(".thumbnails img:nth-of-type(2)"), $(".thumbnails img:nth-of-type(3)"), $(".thumbnails img:last-child")]; 
    var text = [$(".text-holder .text:first-child"), $(".text-holder .text:nth-of-type(2)"), $(".text-holder .text:nth-of-type(3)"), $(".text-holder .text:last-child")]; 
    var backgrounds = ["url('/images/content/slider/Banner_Hintergrund_telbes-01.jpg')", "url('/images/content/slider/Banner_Hintergrund_telbes-02.jpg')", "url('/images/content/slider/Banner_Hintergrund_telbes-03.jpg')", "url('/images/content/slider/Banner_Hintergrund_telbes-04.jpg')"]; 
    var bullets = [$(".bullet-points a:first-child"), $(".bullet-points a:nth-of-type(2)"), $(".bullet-points a:nth-of-type(3)"), $(".bullet-points a:last-child")]; 

    var i = 1; 
    var currentSlide = 1; 
    var time = 3000; 
    var sliderTimer = setInterval(slider, time); 


    // slider navigation 
    $('.bullet-points a, .thumbnails img').click(function(e) { 
    e.preventDefault(); 
    var pos = $(this).index(); 
    clearInterval(sliderTimer); // stop auto slideshow 
    sliderTimer = false; 
    slider(pos); 
    }); 

    function slider(pos) { 
    currentSlide = i; 
    if (typeof(pos) !== 'undefined') { 
     i = pos; 
     images[currentSlide - 1].removeClass("active").addClass('transition'); 
     text[currentSlide - 1].removeClass("active"); 
     thumbnails[currentSlide - 1].removeClass("active-thumbnail"); 
     bullets[currentSlide - 1].removeClass("active-bullet"); 
    } 
    if (i != 0) { 
     images[i - 1].removeClass("active").addClass('transition'); 
     text[i - 1].removeClass("active"); 
     thumbnails[i - 1].removeClass("active-thumbnail"); 
     bullets[i - 1].removeClass("active-bullet"); 
    } 
    if (i == images.length) { i = 0 } 
    images[i].addClass("active"); 
    setTimeout(function() { 
     $(".image-holder img").removeClass('transition'); 
    },1000); 
    text[i].addClass("active"); 
    thumbnails[i].addClass("active-thumbnail"); 
    bullets[i].addClass("active-bullet"); 
    i++; 
    if (!sliderTimer) { 
     sliderTimer = setInterval(slider, time); // start auto slideshow 
    } 
    } 

}); 
+0

は、なぜあなたは、このためだけCSS3を使用したくありませんか? – StuiterSlurf

答えて

0

ですを使用してCSS3、

各画像に絶対位置を与え、各画像に幅を与えます。&高さの値。

スライダページャーが画像の下にくるようにイメージコンテナの高さを設定します。

@keyframestransitionの両方を使用して、効果をどのように実現できるかを示します。

JavaScriptのスライダー機能で、トランジションを追加したり削除したりする機能を追加しました。

$(document).ready(function() { 
 

 
    var images = [$(".image-holder img:first-child"), $(".image-holder img:nth-of-type(2)"), $(".image-holder img:nth-of-type(3)"), $(".image-holder img:last-child")]; 
 
    var thumbnails = [$(".thumbnails img:first-child"), $(".thumbnails img:nth-of-type(2)"), $(".thumbnails img:nth-of-type(3)"), $(".thumbnails img:last-child")]; 
 
    var text = [$(".text-holder .text:first-child"), $(".text-holder .text:nth-of-type(2)"), $(".text-holder .text:nth-of-type(3)"), $(".text-holder .text:last-child")]; 
 
    var bullets = [$(".bullet-points a:first-child"), $(".bullet-points a:nth-of-type(2)"), $(".bullet-points a:nth-of-type(3)"), $(".bullet-points a:last-child")]; 
 

 
    var i = 1; 
 
    var currentSlide = 1; 
 
    var time = 3000; 
 
    var sliderTimer = setInterval(slider, time); 
 

 

 
    // slider navigation 
 
    $('.bullet-points a, .thumbnails img').click(function(e) { 
 
    e.preventDefault(); 
 
    var pos = $(this).index(); 
 
    clearInterval(sliderTimer); // stop auto slideshow 
 
    sliderTimer = false; 
 
    slider(pos); 
 
    }); 
 

 
    function slider(pos) { 
 
    currentSlide = i; 
 
    if (typeof(pos) !== 'undefined') { 
 
     i = pos; 
 
     images[currentSlide - 1].removeClass("active").addClass('transition'); 
 
     text[currentSlide - 1].removeClass("active"); 
 
     thumbnails[currentSlide - 1].removeClass("active-thumbnail"); 
 
     bullets[currentSlide - 1].removeClass("active-bullet"); 
 
    } 
 
    if (i != 0) { 
 
     images[i - 1].removeClass("active").addClass('transition'); 
 
     text[i - 1].removeClass("active"); 
 
     thumbnails[i - 1].removeClass("active-thumbnail"); 
 
     bullets[i - 1].removeClass("active-bullet"); 
 
    } 
 
    if (i == images.length) { i = 0 } 
 
    images[i].addClass("active"); 
 
    setTimeout(function() { 
 
     $(".image-holder img").removeClass('transition'); 
 
    },1000); 
 
    text[i].addClass("active"); 
 
    thumbnails[i].addClass("active-thumbnail"); 
 
    bullets[i].addClass("active-bullet"); 
 
    i++; 
 
    if (!sliderTimer) { 
 
     sliderTimer = setInterval(slider, time); // start auto slideshow 
 
    } 
 
    } 
 

 
});
/*how I could allign the images in one row*/ 
 
.image-holder { 
 
    display: inline-block; 
 
    width: 100%; 
 
    height: 220px; 
 
} 
 

 
.image-holder img { 
 
    display: block; 
 
    width: 200px; 
 
    height: 200px; 
 
    margin: 0; 
 
    opacity: 0; 
 
    top: 0; 
 
    left: 100%; 
 
    transition: left ease 1s; 
 
    position: absolute; 
 
} 
 
.image-holder img.transition { 
 
    animation: moveSlider ease 2s; 
 
    opacity: 1; 
 
} 
 
@keyframes moveSlider { 
 
    0% { 
 
    left: 50%; 
 
    } 
 
    50% { 
 
    left: -100%; 
 
    } 
 
    100% { 
 
    opacity: 0; 
 
    left: 100%; 
 
    } 
 
} 
 
.image-holder img.active { 
 
    left: 50%; 
 
    transform: translateX(-50%); 
 
    opacity: 1; 
 
} 
 

 
/*END image row allignment*/ 
 

 
.text-holder p{margin: 0;} 
 
.slider{ 
 
    padding:15px; 
 
    margin-top: 50px; 
 
    /*background-image: url('https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTHzNrZnq-4-FItozqSu2ZWCBXW4LjWKTlkOOgDlZFj-JtdTuclVQ');*/ 
 
    background-color: blue; 
 
    background-repeat: no-repeat; 
 
    background-size: 100% 100%; 
 
    display: inline-block; 
 
    width: 100%; 
 
} 
 

 
.thumbnails { 
 
    height: 100%; 
 
} 
 

 
.thumbnails img { 
 
    width: 100%; 
 
    height: auto; 
 
    display: block; 
 
    margin-bottom: 5px; 
 
} 
 

 
.thumbnails img:hover{ 
 
    cursor: pointer; 
 
} 
 

 

 
.text-holder .text { 
 
    display: none; 
 
} 
 
.text-holder .text.active { 
 
    display: block; 
 
} 
 

 
/*display active image*/ 
 

 
.active { 
 
} 
 

 
.active-bullet{ 
 
    color: #E22C26!important; 
 
} 
 

 
/*hide thumbnail when image is active*/ 
 

 
.active-thumbnail{ 
 
    display: none!important; 
 
} 
 

 
.bullet-points{ 
 
    display: block; 
 
    text-align: center; 
 
} 
 

 
.bullet-points a{ 
 
    font-size: 40px; 
 
    text-decoration: none; 
 
    color: #ccc; 
 
    
 
} 
 

 
.bullet-points a:hover{ 
 
    color: #E22C26!important; 
 
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" rel="stylesheet"/> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="slider"> 
 
     <div class="row"> 
 
     <div class="col-md-4"> 
 
      <div class="image-holder"> 
 
      <img src="https://res.cloudinary.com/somestuff/image/upload/v1497993474/money_gsliha.jpg" class="active"> 
 
      <img src="https://res.cloudinary.com/somestuff/image/upload/v1497993472/rap_zduqat.jpg"> 
 
      <img src="https://res.cloudinary.com/somestuff/image/upload/v1497993471/rauch_oikfed.jpg"> 
 
      <img src="https://res.cloudinary.com/somestuff/image/upload/v1497993471/girls_x07ay8.jpg"> 
 
      </div> 
 
      <div class="bullet-points"> 
 
      <a href="_self" class="active-bullet">&bull;</a> 
 
      <a href="_self">&bull;</a> 
 
      <a href="_self">&bull;</a> 
 
      <a href="_self">&bull;</a> 
 
      </div> 
 
     </div> 
 
     <div class="col-md-1"> 
 
      <div class="thumbnails"> 
 
      <img src="https://res.cloudinary.com/somestuff/image/upload/v1497993474/money_gsliha.jpg" class="active-thumbnail"> 
 
      <img src="https://res.cloudinary.com/somestuff/image/upload/v1497993472/rap_zduqat.jpg"> 
 
      <img src="https://res.cloudinary.com/somestuff/image/upload/v1497993471/rauch_oikfed.jpg"> 
 
      <img src="https://res.cloudinary.com/somestuff/image/upload/v1497993471/girls_x07ay8.jpg"> 
 
      </div> 
 
     </div> 
 
     <div class="col-md-7"> 
 
      <div class="text-holder"> 
 
      <div class="text active"> 
 
       <p>Lorem Ipsum</p> 
 
       <h1>Giant Heading 1</h1> 
 
       <p>Some more text</p> 
 
      </div> 
 
      <div class="text"> 
 
       <p>Lorem Ipsum</p> 
 
       <h1>Giant Heading 2</h1> 
 
       <p>Some more text</p> 
 
      </div> 
 
      <div class="text"> 
 
       <p>Lorem Ipsum</p> 
 
       <h1>Giant Heading 3</h1> 
 
       <p>Some more text</p> 
 
      </div> 
 
      <div class="text"> 
 
       <p>Lorem Ipsum</p> 
 
       <h1>Giant Heading 4</h1> 
 
       <p>Some more text</p> 
 
      </div> 
 
      </div> 
 
     </div> 
 

 
     </div> 
 
</div>

+0

ありがとう、これは役に立ちます。たぶん私はもっと正確にすべきだったでしょう。私はそれがアクティブで、入ってくるイメージがコンテナに残っていて、イメージがお互いに張っているような小さなスワイプのアニメーションがあることを欲しかった。分かりますか?どうすればそれを実現できますか?私が何を意味しているのか分からなければ、私はそのことを明確にすることができます。私の以前の質問でも助けてくれてありがとう:) – Insane

+0

正確にこのようなhttps://bootsnipp.com/snippets/Padax – Insane

+0

このリンクを参照してくださいhttps://stackoverflow.com/questions/44716768/jquery-how-to-change j-key-to-with-jqueryのキーフレームですか?noredirect = 1#comment76416225_44716768 – Insane