2017-01-17 2 views
1

7枚の写真、次と前のボタンのスライダを作った。スライダは自動的に動作し、スライダをホバリングするとループが停止します。右のスライドで自動的に変化するスライダに箇条書きを追加

私は静的HTMLで書かれた対話型の箇条書きを追加しようとしましたが、これは与えられた画像に反応します。
箇条書きの数はスライドの数と同じでなければなりませんが、がない場合はを1つずつ追加する必要があります。
しかし、私はそれを行う方法がわかりません。誰も助けることができますか?

var slideIndex = 1; 
 
showSlides(slideIndex); 
 

 
function plusSlides(n) { 
 
    showSlides(slideIndex += n); 
 
} 
 

 
function currentSlide(n) { 
 
    showSlides(slideIndex = n); 
 
} 
 

 
function showSlides(n) { 
 
    var i; 
 
    var slides = document.getElementsByClassName("mySlides"); 
 
    var dots = document.getElementsByClassName("dot"); 
 
    if (n > slides.length) {slideIndex = 1} 
 
    if (n < 1) {slideIndex = slides.length} 
 
    for (i = 0; i < slides.length; i++) { 
 
    slides[i].style.display = "none"; 
 
    } 
 
    for (i = 0; i < dots.length; i++) { 
 
    dots[i].className = dots[i].className.replace("active", ""); 
 
    } 
 

 
    if (slides.length > 0) { 
 
    slides[slideIndex-1].style.display = "block"; 
 
    dots[slideIndex-1].className += " active"; 
 
    } 
 
} 
 

 
$(document).ready(function() { 
 
    var interval = setInterval(function() { 
 
    var $curr = $('.mySlides:visible'), 
 
     $next = ($curr.next().length) ? $curr.next() : $('.mySlides').first(); 
 
    $next.css('z-index',2).fadeIn('slow', function() { 
 
     $curr.hide().css('z-index',0); 
 
     $next.css('z-index',1); 
 
    }); 
 
    }, 5000); 
 
    
 
    $('.mySlides').hover(function() { 
 
    clearInterval(interval); 
 
    }, function() { 
 
    interval = setInterval(function() { 
 
     var $curr = $('.mySlides:visible'), 
 
      $next = ($curr.next().length) ? $curr.next() : $('.mySlides').first(); 
 
     $next.css('z-index',2).fadeIn('slow', function() { 
 
     $curr.hide().css('z-index',0); 
 
     $next.css('z-index',1); 
 
     }); 
 
    }, 5000); 
 
    }); 
 
});
/* SLIDER*/ 
 
#containermio { 
 
    width: 100%; 
 
    margin: 0 auto; 
 
    overflow: hidden; 
 
    height: 536px; 
 
    position: relative; 
 
} 
 

 
#containermio a:hover { 
 
    color: white; 
 
} 
 

 
#containermio ul { 
 
    margin: 0px; 
 
    padding: 0px; 
 
    width: 100%; 
 
    list-style: none; 
 
    height: 100%; 
 
    position: absolute; 
 
} 
 

 
#containermio ul li { 
 
    height: 100%; 
 
    display: none; 
 
    position: relative; 
 
} 
 

 
#containermio ul li:first-child { 
 
    display: block; 
 
} 
 

 
#containermio ul li img { 
 
    width: 100%; 
 
    min-height: 100%; 
 
} 
 

 
/* FADE */ 
 
.mySlides { 
 
    -webkit-animation-name: fade; 
 
    -webkit-animation-duration: 1.5s; 
 
    animation-name: fade; 
 
    animation-duration: 1.5s; 
 
} 
 

 
@-webkit-keyframes fade { 
 
    from {opacity: .4} 
 
    to {opacity: 1} 
 
} 
 

 
@keyframes fade { 
 
    from {opacity: .4} 
 
    to {opacity: 1} 
 
} 
 

 
/* SLIDE TITLE*/ 
 
.text { 
 
    margin: 0; 
 
    padding: 20px 0 0 25px; 
 
    font-size: 40px; 
 
    font-weight: 600; 
 
    color: #f7f7f7; 
 
    text-align: center; 
 
    position: absolute; 
 
    font-family: 'Montserrat', sans-serif; 
 
} 
 

 
/* ARROWS */ 
 
.prev, .next { 
 
    z-index: 99; 
 
    cursor: pointer; 
 
    position: absolute; 
 
    display: block; 
 
    top: 40%; 
 
    width: auto; 
 
    color: #fff; 
 
    font-weight: bold; 
 
    font-size: 18px; 
 
    transition: 0.6s ease; 
 
    border-radius: 0 3px 3px 0; 
 
    padding: 25px 25px 25px 25px; 
 
} 
 

 
.next { 
 
    right: 0; 
 
    border-radius: 3px 0 0 3px; 
 
} 
 

 
.prev:hover, .next:hover { 
 
    background-color: rgba(0,0,0,0.8); 
 
    text-decoration: none; 
 
} 
 

 
/* DOTS */ 
 
.dotdiv { 
 
    bottom: 10px; 
 
    position: absolute; 
 
    width: 100%; 
 
    text-align: center; 
 
    z-index: 99; 
 
} 
 

 
.dot { 
 
    cursor:pointer; 
 
    height: 6px; 
 
    width: 6px; 
 
    margin: 0 2px; 
 
    background-color: #eee; 
 
    border-radius: 50%; 
 
    display: inline-block; 
 
    transition: background-color 0.6s ease; 
 
    z-index: 99; 
 
} 
 

 
.active, .dot:hover { 
 
    background-color: #717171; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 
 
<script src="https://code.jquery.com/ui/1.9.2/jquery-ui.js"></script> 
 
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> 
 

 
<div id="containermio"> 
 
    <ul id="slidermio"> 
 
    <li class="mySlides"> 
 
     <div id="slide1" class="text">alicè</div> 
 
     <img src="http://digitaljournal.com/img/8/7/8/4/4/i/1/1/7/o/ulingan_kids.jpg"/> 
 
    </li> 
 
    <li class="mySlides"> 
 
     <div id="slide2" class="text">halo halo</div> 
 
     <img src="http://freethoughtblogs.com/taslima/files/2012/06/22-funny2.jpg"/> 
 
    </li> 
 
    <li class="mySlides"> 
 
     <div id="slide3" class="text">tilt</div> 
 
     <img src="http://kenwheeler.github.io/slick/img/fonz1.png"/> 
 
    </li> 
 
    <li class="mySlides"> 
 
     <div id="slide4" class="text">artist unknown</div> 
 
     <img src="http://www.chinadaily.com.cn/china/images/2010WenUN/attachement/jpg/site1/20100921/0013729ece6b0e01d9691a.jpg"/> 
 
    </li> 
 
    <li class="mySlides"> 
 
     <div id="slide5" class="text">insa</div> 
 
     <img src="http://kenwheeler.github.io/slick/img/fonz2.png"/> 
 
    </li> 
 
    <li class="mySlides"> 
 
     <div id="slide6" class="text">blue lights</div> 
 
     <img src="http://kenwheeler.github.io/slick/img/fonz3.png"/> 
 
    </li> 
 
    <li class="mySlides"> 
 
     <div id="slide7" class="text">outdoor festival</div> 
 
     <img src="http://kenwheeler.github.io/slick/img/fonz3.png"/> 
 
    </li> 
 
    </ul> 
 
    
 
    <a class="prev" onclick="plusSlides(-1)">&#10094;</a> 
 
    <a class="next" onclick="plusSlides(1)">&#10095;</a> 
 
    
 
    <div class="dotdiv"> 
 
    <span class="dot" onclick="currentSlide(1)"></span> 
 
    <span class="dot" onclick="currentSlide(+1)"></span> 
 
    <span class="dot" onclick="currentSlide(+1)"></span> 
 
    <span class="dot" onclick="currentSlide(+1)"></span> 
 
    <span class="dot" onclick="currentSlide(+1)"></span> 
 
    <span class="dot" onclick="currentSlide(+1)"></span> 
 
    <span class="dot" onclick="currentSlide(+1)"></span> 
 
    </div> 
 
</div>
jsfiddle:https://jsfiddle.net/e9m3yupp/   (オリジナル:https://jsfiddle.net/hctxgqhx/

+0

あなた 'currentSlide'機能はありますか? – nashcheez

+0

私は誤って削除しました。申し訳ありません。とにかくここを過ぎてコードを修正します。 @nashcheez function currentSlide(n){ showSlides(slideIndex = n); } –

答えて

0

私はそれをはるかに柔軟かつ簡潔にするために、あなたのコードで多くのことを変更しました。
1つ1つを説明するにはあまりにも多くの変更がありますので、代わりに以下のコードスニペットのコメントを使用して、すべての行が何をしているか説明します。

しかし、私はほとんどの主要な変更を合計します:

  • 私は、アレイ内のすべてのスライドを置きます。その配列では、すべてのスライドはtxtimgというプロパティを含むオブジェクトで表されます。配列の最初のインデックス([0])は、スライドインデックスを格納するために使用されます。
    HTMLから<li>のすべてを含む<ul>を削除し、<div>に置き換えました。そして、要素を切り替える代わりに、私は画像のソースを変更します。
    この方法では、HTMLに新しいスライドを追加する必要はなく、JS内のスライド配列にスライドオブジェクトを追加するだけで済みます。
  • 私は、HTMLからのJSに(矢印弾丸/ドット用)onclickハンドラを動かします。すべてのJSコードをHTMLの外側に置いておくことをお勧めします。
  • CSSのすべての「変更」にあまり注意を払わないでください。ほとんどの場合、私は自分の読みやすさのために物事を並べ替えて再フォーマットするだけですが、それは習得した味であることを認めます:)
    実際の変更はレイアウト/機能にとって重要ですが、私はそんなに変わって私は覚えていない。

残念ながら、私は新しいコードで動作するように(下のコードブロックを参照してください)CSS fadeアニメーションを得ることができませんでした。要素の代わりにソースを切り替えるため、すべてのスライドに対して1つの要素しか存在しないため、アニメーションはもはや起動しません。私は多くのことを試みましたが、成功しませんでした。

/* FADE */ 
.slide {-webkit-animation-name:fade; -webkit-animation-duration:1.5s; animation-name:fade; animation-duration:1.5s;} 
@-webkit-keyframes fade {from {opacity:.4} to {opacity:1}} 
@keyframes fade {from {opacity:.4} to {opacity:1}} 

は、だから私はjQueryのを使用して、JSにそのアニメーションを移動しなければならなかった:

$(".slide").fadeTo(0,.4,function(){$(this).fadeTo(1500,1);}); 

あなたが本当にCSSでアニメーションを行いたい場合は、私が作成するのに使用されるように、あなたが同様のコードを使用することができます箇条書き/ドット(コードスニペットを参照)、配列内のすべてのスライドに<li>も作成します。しかし、それは多くの要素をあなたのウェブページに集めてくれます。あなたが追加するスライドが増えると、どのオプションが良いか分かりません。


コードスニペット:

$(document).ready(function() { 
 
    var interval; 
 
    var slides = [ 
 
    1, 
 
    {txt:"alicè", img:"http://digitaljournal.com/img/8/7/8/4/4/i/1/1/7/o/ulingan_kids.jpg"}, 
 
    {txt:"halo halo", img:"http://freethoughtblogs.com/taslima/files/2012/06/22-funny2.jpg"}, 
 
    {txt:"tilt", img:"http://kenwheeler.github.io/slick/img/fonz1.png"}, 
 
    {txt:"artist unknown", img:"http://www.chinadaily.com.cn/china/images/2010WenUN/attachement/jpg/site1/20100921/0013729ece6b0e01d9691a.jpg"}, 
 
    {txt:"insa", img:"http://kenwheeler.github.io/slick/img/fonz2.png"}, 
 
    {txt:"blue lights", img:"http://kenwheeler.github.io/slick/img/fonz3.png"}, 
 
    {txt:"outdoor festival", img:"http://kenwheeler.github.io/slick/img/fonz3.png"} 
 
    ]; 
 
    
 
    /* SLIDE INTERVAL*/ 
 
    function startSlideInterval(){interval = setInterval(function(){$(".next").click();},5000);} //trigger the next-button on every interval 
 
    $('.slide').hover(function(){clearInterval(interval);},startSlideInterval); //clear interval on 'hover', restart interval on 'unhover' 
 
    
 
    /* SHOW SLIDE */ 
 
    function showSlide(n) { 
 
    if (n>slides.length-1) {n=1;} else if (n<1) {n=slides.length-1;} //loop around to first/last slide 
 
    $(".slide img").attr("src",slides[n].img); //change image 
 
    $(".slide div").html(slides[n].txt); //change text 
 
    $(".bullets span:nth-child("+slides[0]+")").removeClass("active"); //deactivate old bullet 
 
    $(".bullets span:nth-child("+n+")").addClass("active"); //activate new bullet 
 
    $(".slide").fadeTo(0,.4,function(){$(this).fadeTo(1500,1);}); //fade new slide 
 
    slides[0] = n; //set slide-index to new value 
 
    } 
 
    
 
    /* ARROWS */ 
 
    $(".prev").click(function(){showSlide(slides[0]-1);}); //click-handler 
 
    $(".next").click(function(){showSlide(slides[0]+1);}); //click-handler 
 
    
 
    /* BULLETS */ 
 
    (function(){ 
 
    var bullets = ""; 
 
    for (var i=1,count=slides.length; i<count; ++i) {bullets += "<span></span>"} //add a bullet for every slide in the array 
 
    $(".bullets").append(bullets); //append bullets to their container 
 
    $(".bullets span").click(function(){showSlide($(this).index()+1);}); //click-handler 
 
    })(); 
 
    
 
    /* INITIALIZE */ 
 
    showSlide(slides[0]); //show the first slide 
 
    startSlideInterval(); //start slide-interval 
 
});
html {width:95%; height:90%;} /*ONLY FOR CODE SNIPPET*/ 
 
body {width:100%; height:100%;} 
 

 
/* SLIDER */ 
 
#slider {position:relative; width:90%; height:80%; margin:0 auto; background-color:grey; overflow:hidden;} 
 
#slider .slide {width:100%; height:100%; text-align:center;} 
 
#slider .slide img {width:auto; height:100%;} 
 
#slider .slide div {position:absolute; left:0; top:0; margin:0; padding:20px 0 0 25px; text-align:center; font-family:'Montserrat',sans-serif; font-size:40px; font-weight:600; color:#f7f7f7;} 
 

 
/* ARROWS */ 
 
#slider a { 
 
    display: block; 
 
    position: absolute; 
 
    top: 50%; 
 
    -webkit-transform: translateY(-50%); 
 
    transform: translateY(-50%); 
 
    width: auto; 
 
    padding: 25px; 
 
    text-decoration: none; 
 
    font-size: 18px; 
 
    font-weight: bold; 
 
    color: #fff; 
 
    cursor: pointer; 
 
    z-index: 1; 
 
    transition: background-color 0.6s ease; 
 
} 
 
#slider a:hover {background-color:rgba(0,0,0,0.8);} 
 
#slider a.prev {left:0; border-radius:0 3px 3px 0;} 
 
#slider a.next {right:0; border-radius:3px 0 0 3px;} 
 

 
/* BULLETS */ 
 
.bullets {position:absolute; bottom:10px; width:100%; text-align:center; z-index:1;} 
 
.bullets span { 
 
    display: inline-block; 
 
    width: 6px; 
 
    height: 6px; 
 
    margin: 0 2px; 
 
    border-radius: 50%; 
 
    background-color: #eee; 
 
    cursor:pointer; 
 
    transition: background-color 0.6s ease; 
 
} 
 
.bullets span:hover, .bullets span.active {background-color:#717171;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 
 
<script src="https://code.jquery.com/ui/1.9.2/jquery-ui.js"></script> 
 
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> 
 

 
<div id="slider"> 
 
    <div class="slide"><img src="" /><div></div></div> 
 
    <a class="prev">&#10094;</a><a class="next">&#10095;</a> 
 
    <div class="bullets"></div> 
 
</div>
jsfiddle:https://jsfiddle.net/hctxgqhx/16/

+0

うわー、あなたは魔術師です:Dあなたが理解できるように、私はjavascriptとjqueryで非常に新しいので、ありがとう、コードとコードを一緒に使って作業しています。Dありがとう! 私が得意でない唯一のものはこれです。 $( "。bullets span:nth-​​child(" + slides [0] + ")")removeClass( "active"); addClass( "active"); $( "。箇条書きはn番目の子(" + n + ")")です。 span:nth-​​child( "+ slides [0] +")とspan:nth-​​child( "+ n +")はどういう意味ですか? @myfunkyside –

+0

'showSlides()'の中でforループを最初のものに置き換えます。 'dots [i] .className = dots [i] .className.replace(" active "、" ");'全ての箇条書き/点をループして ''アクティブな ''クラスを削除すると、クラスを持っていることがわかっている箇条書きからクラスを削除するだけです。アクティブなスライドに対応するもの。 *セレクタ*( '" .bullets ")にマッチするすべての要素から[** nth-child()**](https://api.jquery.com/nth-child-selector/) span ")、親コンテナ内の' n番目の位置/インデックスの要素を選択します。リンクを読んでください。 – myfunkyside

+0

そして、その 'nth'子を選択するための番号として、slide- [** array **](https:// developerに格納されているスライドインデックスを使用します。 mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array): 'slides [0]'(配列を理解するためのリンクを参照)。 **重要**:配列はインデックス '[0]'で始まり、 'nth-child()'は '(1)'で始まります。通常は、それを修正する必要がありますが、配列ではスライドインデックスが '[0]'に格納されているため、実際の値(スライド)はインデックス '[1]'から始まります。配列は、ページ上の箇条書きの 'nth-child()'番号と同じインデックスを持ちます.. – myfunkyside

関連する問題