モーダルウィンドウ内で画像のスライドショーを実装する【Colorbox】についてまとめました。
Colorboxはモーダルウィンドウを簡単に実装できるプラグインになります。
まずは、簡単なデモを作りました。
公式サイトからファイルをダウンロードする
Colorboxの公式サイトから必要なファイルを一式ダウンロードします。
そして、今回はその中から
・jquery.colorbox-min.js
・colorbox.css
を制作中のディレクトリ内へ配置します。
各ファイル読み込み
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;
}
}