Warning: Trying to access array offset on value of type bool in /home/yotigory/codingmania.net/public_html/wp-content/plugins/search-everything/config.php on line 29
slick[jquery]を使ってサムネイル[カルーセル]が付いたスライドショー - CodingMania

2015/12/12

slick[jquery]を使ってサムネイル[カルーセル]が付いたスライドショー

サムネイルの枚数が多くなっても、少なくなっても対応できます。Youtubeなども入れることができます。

slickのサイトよりプラグイン一式をダウンロードし、JSとCSSを読み込みます。
main.jsで動きを設定。style.cssでスタイルを調整しています。
不具合修正しました。左右の矢印、現在地表示追加。【更新:2016/04/15】
8枚に満たないい場合のスワイプに対応しました。【更新:2017/11/29】

JSとCSSを読み込みます

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<link rel="stylesheet" href="slick/slick.css" type="text/css" media="all" />
<script type="text/javascript" src="slick/slick.js"></script>
<script type="text/javascript" src="js/main.js"></script>

main.js JavaScript

$(function() {
    //slick
    $(".slider-for01").slick({
        slidesToShow: 1,
        slidesToScroll: 1,
        dots: true,
        //arrows: false,
        fade: true,
        adaptiveHeight: true,
        asNavFor: '.slider-nav01'
    });
    $(".slider-nav01").slick({
        slidesToShow: 8,
        slidesToScroll: 1,
        asNavFor: '.slider-for01',
        //centerMode: true,
        focusOnSelect: true
    });
    $(".slider-for02").slick({
        slidesToShow: 1,
        slidesToScroll: 1,
        dots: true,
        //arrows: false,
        fade: true,
        adaptiveHeight: true,
        asNavFor: '.slider-nav02'
    });
    $(".slider-nav02").slick({
        slidesToShow: 8,
        slidesToScroll: 1,
        asNavFor: '.slider-for02',
        //centerMode: true,
        focusOnSelect: true
    });
    $(".slider-for03").slick({
        slidesToShow: 1,
        slidesToScroll: 1,
        dots: true,
        //arrows: false,
        fade: true,
        adaptiveHeight: true,
        asNavFor: '.slider-nav03'
    });
    $(".slider-nav03").slick({
        slidesToShow: 8,
        slidesToScroll: 1,
        asNavFor: '.slider-for03',
        //centerMode: true,
        focusOnSelect: true
    });
    //枚数がカルーセルに満たない場合
    $(function() {
        $(".mod_slide").each(function() {
            var slidepak = $(this);
            var image = $(slidepak).find(".mod_slide_img");
            var num = $(slidepak).find(".mod_slide_img img").length;
            var dots = $(slidepak).find(".slick-dots li");
            var navimglast = $(slidepak).find("div.mod_slide_nav div.slick-track>div.slick-slide:last-child");
            var prevbtn = $(slidepak).find("button.slick-prev");
            var nextbtn = $(slidepak).find("button.slick-next");
            var slidernav = $(slidepak).find(".mod_slide_nav .slick-track>div");
            //
            if (num < 8) {
                $(dots).click(function() {
                    $(slidernav).removeClass("slick-current");
                    var indexnum = $(dots).index(this) + 1;
                    var checkimg = $(slidepak).find(".mod_slide_nav .slick-track>div:nth-child(" + indexnum + ")");
                    $(checkimg).addClass("slick-current");
                });

                function currmove() {
                    $(slidernav).removeClass("slick-current");
                    var curr = $(slidepak).find(".slick-dots li.slick-active");
                    var currIndex = $(dots).index(curr) + 1;
                    var btncheckimg = $(slidepak).find(".mod_slide_nav .slick-track>div:nth-child(" + currIndex + ")");
                    $(btncheckimg).addClass("slick-current");
                }
                $(prevbtn).click(function() {
                    currmove();
                });
                $(nextbtn).click(function() {
                    currmove();
                });
                // On swipe event
                $(image).on('swipe', function(event, slick, direction) {
                    currmove();
                    // left
                });

            }
        });
    });
});

HTMl

<div class="mod_slide">
<div class="mod_slide_img slider-for01">
<div><img src="img/01.jpg" /></div>
<div><img src="img/02.jpg" /></div>
<div><img src="img/03.jpg" /></div>
<div><img src="img/04.jpg" /></div>
<div><img src="img/05.jpg" /></div>
<div><img src="img/06.jpg" /></div>
<div><img src="img/07.jpg" /></div>
<div><img src="img/08.jpg" /></div>
<div><img src="img/09.jpg" /></div>
</div>
<div class="mod_slide_nav slider-nav01">
<div><img src="img/01.jpg" /></div>
<div><img src="img/02.jpg" /></div>
<div><img src="img/03.jpg" /></div>
<div><img src="img/04.jpg" /></div>
<div><img src="img/05.jpg" /></div>
<div><img src="img/06.jpg" /></div>
<div><img src="img/07.jpg" /></div>
<div><img src="img/08.jpg" /></div>
<div><img src="img/09.jpg" /></div>
</div>
<!-- //mod_slide --></div>

CSS

@charset "utf-8";



/* mod_body
-----------------------------------------*/
.mod_body{
  margin: 0 auto;
  width: 967px;
  margin-top: 50px;
}
.mod_body p{
  margin: 20px 0 20px 0;
}

/* mod_slide
-----------------------------------------*/
.mod_slide{
 margin:0 auto;
 width:706px;
 margin-bottom: 50px;
}
.mod_slide .mod_slide_nav .slick-slide{
 margin:5px;
}
.mod_slide .mod_slide_nav .slick-slide img{
 width:100%;
 height:auto;
 box-sizing:border-box;
 border:solid 2px #FFF;
 cursor: pointer;
}
.mod_slide .mod_slide_nav .slick-slide.slick-current img{
 border:solid 2px #f5a711;
}
.slick-initialized .slick-slide {
 overflow:hidden;
 }
/* slick-list */
.mod_slide_nav .slick-list {
  margin: 0 30px 0 30px;
}
/* slick-dots */
.slick-dots {
    margin-top: 10px;
    display: block;
    list-style: outside none none;
    padding: 0;
    text-align: center;
    width: 100%;
}
.slick-dots li {
    cursor: pointer;
    display: inline-block;
    height: 20px;
    margin: 0 5px;
    padding: 0;
    position: relative;
    width: 15px;
}
.slick-dots li button {
    background: transparent none repeat scroll 0 0;
    border: 0 none;
    color: transparent;
    cursor: pointer;
    display: block;
    font-size: 0;
    height: 20px;
    line-height: 0;
    outline: medium none;
    padding: 5px;
    width: 20px;
}
.slick-dots li button:hover, .slick-dots li button:focus {
    outline: medium none;
}
.slick-dots li button:hover::before, .slick-dots li button:focus::before {
    opacity: 1;
}
.slick-dots li button::before {
    color: black;
    content: "●";
    font-size: 28px;
    height: 20px;
    left: 0;
    line-height: 20px;
    opacity: 0.25;
    position: absolute;
    text-align: center;
    top: 0;
    width: 15px;
}
.slick-dots li.slick-active button::before {
    color: black;
    opacity: 0.55;
    font-size: 34px;
}
/*  */
.slick-prev, .slick-next {
    background: transparent none repeat scroll 0 0;
    border: medium none;
    color: transparent;
    cursor: pointer;
    display: block;
    font-size: 0;
    height: 20px;
    line-height: 0;
    margin-top: -30px;
    outline: medium none;
    padding: 0;
    position: absolute;
    top: 50%;
    width: 20px;
    z-index:9;
}
.slick-prev:hover, .slick-prev:focus, .slick-next:hover, .slick-next:focus {
    background: transparent none repeat scroll 0 0;
    color: transparent;
    outline: medium none;
}
.slick-prev:hover::before, .slick-prev:focus::before, .slick-next:hover::before, .slick-next:focus::before {
    opacity: 1;
}
.slick-prev.slick-disabled::before, .slick-next.slick-disabled::before {
    opacity: 0.25;
}
.slick-prev::before, .slick-next::before {
    color: #666;
    font-size: 20px;
    line-height: 1;
    opacity: 0.75;
}
.slick-prev {
    left: 0px;
}
[dir="rtl"] .slick-prev {
    left: auto;
    right: 0px;
}
.slick-prev::before {
  content: " \f053";
  font-family: FontAwesome;
}
[dir="rtl"] .slick-prev::before {
  content: " \f054";
  font-family: FontAwesome;
}
.slick-next {
    right: 0px;
}
[dir="rtl"] .slick-next {
    left: 0px;
    right: auto;
}
.slick-next::before {
  content: " \f054";
  font-family: FontAwesome;
}
[dir="rtl"] .slick-next::before {
  content: " \f053";
  font-family: FontAwesome;
}