icon

【Colorbox】モーダルウィンドウ内で画像のスライドショーを実装できる

colorbox
投稿日時

更新日時

モーダルウィンドウ内で画像のスライドショーを実装する【Colorbox】についてまとめました。

Colorboxはモーダルウィンドウを簡単に実装できるプラグインになります。

まずは、簡単なデモを作りました。

デモページはこちら

公式サイトからファイルをダウンロードする

Colorboxの公式サイトから必要なファイルを一式ダウンロードします。

そして、今回はその中から

・jquery.colorbox-min.js

・colorbox.css

を制作中のディレクトリ内へ配置します。

Colorbox公式サイトはこちら

各ファイル読み込み

jQueryを使用するので、CDNで読み込んでいます。

<link rel="stylesheet" href="css/colorbox.css">

//***html***//

<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
<script type="text/javascript" src="js/jquery.colorbox-min.js"></script>
<script type="text/javascript" src="js/main.js"></script>

HTML

aタグのhrefにモーダルで表示させたい画像のパスを記入します。また、aタグにclassを指定しそのクラスにオプションをつけていきます。このクラスごとにモーダル内でスライドショーに出る画像が決まります。

/**html**/

<body>
 <div class="gallery_area">
  <div><a class="group1" href="images/luca-bravo-VowIFDxogG4-unsplash.jpg"><img src="images/luca-bravo-VowIFDxogG4-unsplash.jpg"></a></div>
  <div><a class="group1" href="images/sarah-dorweiler-x2Tmfd1-SgA-unsplash.jpg"><img src="images/sarah-dorweiler-x2Tmfd1-SgA-unsplash.jpg"></a></div>
  <div><a class="group1" href="images/srinivasan-venkataraman-9NmYCjfBGp0-unsplash.jpg"><img src="images/srinivasan-venkataraman-9NmYCjfBGp0-unsplash.jpg"></a></div>
  <div><a class="group1" href="images/staircase-g0f6d8865e_640.jpg"><img src="images/staircase-g0f6d8865e_640.jpg"></a></div>
 </div>
</body>

JavaScript

先ほどaタグにつけたクラスに対して、Colorboxのオプションをつけていきます。今回は、レスポンシブに対応するために、

・maxWidth:"90%", maxHeight:"90%"

画像をクリックしてモーダルが表示させるまでの時間を、

・speed:100

モーダルを固定するために、

・fixed:true

を使用しています。

その他オプションはこちら

//**モーダルウィンドウ**//
$(document).ready(function(){
 $(".group1").colorbox({rel:'group1', maxWidth:"90%", maxHeight:"90%",speed:100,fixed:true});
 });

colorbox.css

既存のCSSをかなりアレンジしてあります。ダウンロードしたファイル内のimagesファイルにある画像を使用すれば、矢印やクローズアイコンなどはそのまま使用可能です。

今回は、自分で制作したアイコンを使用しています。

/*
  Colorbox Core Style:
  The following CSS is consistent between example themes and should not be altered.
*/
#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; -webkit-transform: translate3d(0,0,0);}
#cboxWrapper {max-width:none;}
#cboxOverlay{position:fixed; width:100%; height:100%;background-color:#000000e3;}
#cboxMiddleLeft, #cboxBottomLeft{clear:left;}
#cboxContent{position:relative;}
#cboxLoadedContent{overflow:auto; -webkit-overflow-scrolling: touch;}
#cboxTitle{margin:0;}
#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;}
#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;}
.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none; -ms-interpolation-mode:bicubic;}
.cboxIframe{width:100%; height:100%; display:block; border:0; padding:0; margin:0;}
#colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box; -moz-box-sizing:content-box; -webkit-box-sizing:content-box;}

/* 
  User Style:
  Change the following styles to modify the appearance of Colorbox. They are
  ordered & tabbed in a way that represents the nesting of the generated HTML.
*/
#colorbox{outline:0;}
    .cboxIframe{background:#fff;}
#cboxCurrent{display:none;}

    /* these elements are buttons, and may need to have additional styles reset to avoid unwanted base styles */
    #cboxPrevious, #cboxNext, #cboxSlideshow, #cboxClose {border:0; padding:0; margin:0; overflow:visible; width:auto; background:none; }
     
    /* avoid outlines on :active (mouseclick), but preserve outlines on :focus (tabbed navigating) */
    #cboxPrevious:active, #cboxNext:active, #cboxSlideshow:active, #cboxClose:active {outline:0;}

    #cboxSlideshow{position:absolute; bottom:4px; right:30px; color:#0092ef;}
#cboxPrevious {
	position: absolute;
	top: 50%;
	left:-80px;
	transform: translatey(-50%);
	width: 55px;
	height: 90px;
	background-image: url(../images/yazirushi.png);
	background-position: center;
	background-repeat:no-repeat;
	background-size: 75%;
	text-indent:100%;
	white-space:nowrap;
	overflow:hidden;
}
#cboxNext {
	position: absolute;
	top: 50%;
	right:-80px;
	transform: translatey(-50%) rotate(180deg);
	width: 55px;
	height: 90px;
	background-image: url(../images/yazirushi.png);
	background-position: center;
	background-repeat:no-repeat;
	background-size: 75%;
	text-indent:100%;
	white-space:nowrap;
	overflow:hidden;
}
#cboxClose {
	position: absolute;
	top: 0;
	right:-80px;
	width: 60px;
	height: 60px;
	background-image: url(../images/close.png);
	background-position: center;
	background-repeat:no-repeat;
	background-size: 75%;
	text-indent:100%;
	white-space:nowrap;
	overflow:hidden;
}

/*
 The following fixes a problem where IE7 and IE8 replace a PNG's alpha transparency with a black fill
 when an alpha filter (opacity change) is set on the element or ancestor element. This style is not applied to or needed in IE9.
 See: http://jacklmoore.com/notes/ie-transparency-problems/
*/
.cboxIE #cboxTopLeft,
.cboxIE #cboxTopCenter,
.cboxIE #cboxTopRight,
.cboxIE #cboxBottomLeft,
.cboxIE #cboxBottomCenter,
.cboxIE #cboxBottomRight,
.cboxIE #cboxMiddleLeft,
.cboxIE #cboxMiddleRight {
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF);
}

@media screen and (max-width: 1000px) {
	#cboxPrevious {
		left:0px;
	}
	#cboxNext,#cboxClose {
		right: 0px;
	}
	#cboxClose {
		top: -65px;
	} 
}