「スライドショーの最後の一枚だけ表示時間を長くしてほしいらしいです。対応お願いいたします。」
「承知致しました。」

とても忙しい中で降ってくると、つい「それ必要あります?」なんて気持ちがよぎりますが、必要です。余裕がある時なら必要性に理解が及ぶのですが、嘘みたいに忙しいと、時々ささくれ立つ事もありますね。もちろん笑顔で快く承りました。

Slick.js や swiper.js 等のカルーセルスライダーのプラグインを使用していたら、callbackなんかで現在のスライドの番号(currentSlide とか nextSlide)取ってやればサクッとできるのですが、今回は前回の記事で書いた切り替えスライダーをしようしていたので、カスタマイズが必要でした。

様々なやり方が想定されますが、時間がなく、なるべくわかりやすく、なるべく直感的にという事で、取り急ぎ以下のような形での実装となりました



▼参考サイト

https://www.it-swarm.dev/ja/javascript/%E5%AE%9F%E8%A1%8C%E4%B8%AD%E3%81%ABsetinterval%E3%81%AE%E9%96%93%E9%9A%94%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B/966978471/

「スライドショー 最後の一枚 長く js」
「スライドショー jquery 最後の一枚 秒数」
等で検索。



▼HTML

<div id="slideshow">
	<div class="slide current">Slide1</div>
	<div class="slide">Slide2</div>
	<div class="slide">Slide3</div>
</div>	

▼SCSS

#slideshow { 
	position: relative; width: 300px; height: 300px; 
	.slide { 
		position: absolute; top: 0; left: 0; width: 100%; height: 100%;
		opacity: 0; transition: opacity .75s;
		&.current { opacity: 1; }	
		//装飾
		display: flex; justify-content: center; align-items: center;
		background: #300;
		color: #fff;
		&:nth-child(3n+2) { background: #030; }
		&:nth-child(3n+3) { background: #003; }
	}
}

▼JS

$(document).ready(function (){

  //kv_slider
  var kvSlide = function ($element) {
    //変数宣言
    var $children = $element.children(),
        current = 0,
        time = 4000; //切り替えの早さ
    //1番目の要素に、current追加
    $children.eq(current).addClass('current');
    //順番に、current追加(current += 1)。子要素($children)の数と、current - 1 の数が等しくなったら、currentは0に戻る
    var interval = time; // initial condition
    var run = setInterval(request , interval); // start setInterval as "run"

    function request() { 

      //繰返す処理
      $children.eq(current).removeClass('current');
      current = current === $children.length - 1 ? 0 : current += 1;
      $children.eq(current).addClass('current');

      clearInterval(run); // stop the setInterval()

      // 要素の最後だけ interval の間隔を長くする
      if(current == $children.length - 1 ){
        interval = time*1.8;
      }else{
        interval = time;
      }

      run = setInterval(request, interval); // start the setInterval()

    }			
  };
  //スライドショーを実行
  setTimeout(function() {
    kvSlide($('#slideshow'));	
  }, 2000);

});