mySlick

by kazuya nakagawa

HTML

<link rel="stylesheet" href="https://unpkg.com/[email protected]/destyle.min.css">

<!-- slick.js -->
<script src="https://cdn.jsdelivr.net/npm/[email protected]/slick/slick.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/slick/slick-theme.min.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/slick/slick.min.css">



<div class="slider">
   <div><img src="https://marucu.com/wp-content/uploads/2023/04/815297.jpg" alt="image1"></div>
  <div><img src="https://marucu.com/wp-content/uploads/2023/04/1072821.jpg" alt="image2"></div>
  <div><img src="https://marucu.com/wp-content/uploads/2023/04/7884473.jpg" alt="image3"></div>
  <div><img src="https://marucu.com/wp-content/uploads/2023/04/2215317.jpg" alt="image4"></div>
</div>

<div class="control-area">
<p class="count-num"><span class="current"></span>/<span class="total"></span></p>
  
</div>

SCSS

.slider img {
  width: 100%;
  height: auto;
}

.dots-bar {
  width: 100%;
  margin: 0;
  padding: 0 30px;
  text-align: center;
  list-style: none;
  display:grid;
  grid-template-columns: repeat(4,1fr);
  
  
  li {
    margin: 0 2px;
  }
  
  button {
    position: relative;
    width: 100%;
    height: 2px;
    border: 0;
    background-color: #eee;
    font-size: 0;
    
    &::after {
      content: '';
      position: absolute;
      top: 0;
      left: 0;
     
      display: block;
      width: 0%;
      height: 100%;
    }
  }
  
  .slick-active {
    button:after {
      background-color: #000;
      animation: progress 3.4s linear forwards;
    }
  }
  .slick-active-first {
    button:after {
      background-color: #000;
      animation: progress 3s linear forwards!important;
    }
  }
}

@keyframes progress {
  from {
    width: 0%;
  }
  
  to {
    width: 100%;
  }
}


.slick-dotted.slick-slider {
    margin-bottom: 10px!important;
}

.control-area{
  display:flex;
  justify-content:center;
  align-items: center;
}
.count-num{
  font-family: Georgia, serif;
  font-size: 26px;
  margin: 0 1em;
  width: 3em;
  text-align:center;
  .total{
    font-size: 18px;
  }
}

JavaScript

$(document).ready(function () {

$('.slider').on('init', function(event, slick) {
	//最初のスライドだけ時間が短いため、CSSアニメーションも短くする
  $('.dots-bar li:first-child').addClass('slick-active-first');
  //スライドの総数と現在のスライド(初期値)をセット
  let totalSlides = slick.slideCount;
  $('.total').text(totalSlides); 
  $('.current').text(1);
});

//最初のCSSアニメーション(短縮)を解除
$('.slider').on('beforeChange', function(event, slick, currentSlide, nextSlide) {
  if (nextSlide === 1) {
    $('.dots-bar li:first-child').removeClass('slick-active-first');
  }
});

$('.slider').slick({
  fade:true,
    autoplay: true,
  autoplaySpeed: 3000,
  speed:400,
  pauseOnFocus:false,
  pauseOnHover:false,
  dots:true,
  dotsClass: 'dots-bar',
  arrows: true,
  appendArrows: '.control-area',
  prevArrow: '<button class="prev"><</button>',
  nextArrow: '<button class="next">></button>'
 });

 
$('.slider').on('beforeChange', function(event, slick, currentSlide, nextSlide) {
  $('.current').text(nextSlide + 1);
});  

});