Owl Sync Sliders Gallery in ModX with Fancybox 3
Create 2 sliders one for thumbnails, one for large images and sync them up using Owl Carousel and also include the fancybox popup image slideshow.
1) Download or load the necessary files; jquery.js, owl.carousel.min.js, fancybox, bootstrap. Make sure to install the Modx extra 'Gallery'.
2) Create a gallery with the MODX "Gallery" plugin.
3) Start in Modx by creating 3 chunks: galleryTpl, galleryPageTpl, galleryPageThumbTpl
galleryTpl:
<div class="gallery">
<div class="big-images owl-carousel">
[[Gallery? &album=`[[*gallery]]` &thumbTpl=`galleryPageTpl` &thumbWidth=`870` &thumbHeight=`458` &imageWidth=`2000` &imageHeight=`2000` &imageQuality=`100` ]]
</div>
</div>
<div class="gallery-nav">
<div class="small-images owl-carousel">
[[Gallery? &album=`[[*gallery]]` &thumbTpl=`galleryPageThumbTpl` &thumbWidth=`150` &thumbHeight=`100`]]
</div>
</div>
galleryPageTpl:
<div class="gallery-main-img"><a href="[[+image]]" data-fancybox="gallery" data-caption="[[+pagetitle]]"><img src="[[+thumbnail]]" alt="[[+name]]"></a></div>
galleryPageThumbTpl:
<div><img src="[[+thumbnail]]" alt="[[+name]]"></div>
4) Insert Jquery Functions after the footer.
<script>
$(document).ready(function(){
var sync1 = $('.big-images'),
sync2 = $('.small-images'),
duration = 300,
thumbs = 6;
// Sync nav
sync2.on('click', '.owl-next', function () {
sync1.trigger('next.owl.carousel')
});
sync2.on('click', '.owl-prev', function () {
sync1.trigger('prev.owl.carousel')
});
// Start Carousel
sync1.owlCarousel({
rtl: true,
center : true,
loop: true,
items : 1,
margin:0,
nav : false
})
.on('dragged.owl.carousel', function (event) {
if (event.item.index == 'left') {
sync2.trigger('next.owl.carousel')
} else {
sync2.trigger('prev.owl.carousel')
}
});
sync2.owlCarousel({
rtl: true,
center: true,
loop: true,
margin:10,
items:thumbs,
nav : true
})
.on('click', '.owl-item', function() {
var i = $(this).index()-(thumbs);
sync1.trigger('to.owl.carousel', [i, duration, true]);
sync2.trigger('to.owl.carousel', [i, duration, true]);
});
$(".gallery-main-img a").fancybox({ //fancybox initaliser
margin:0
});
});
</script>
5) Put in chunk call on page or template
<!--Gallery-->
<div class="container-fluid">
<div class="container">
[[$galleryTpl]]
</div>
</div>
<!--/Gallery-->
6) Test page to see if working
7) Style CSS to suit
.gallery{padding:10px 0;}
.gallery-nav{padding-bottom:10px;}
.gallery-nav .owl-item.active.center {border:solid 3px #0094ff;}
/*Optional Nav Arrow Styles*/
.small-images > .owl-nav > div{display:block;float:left;width: 23px;height:0;padding-top: 23px;margin: 0 auto;background-position:center top;background-repeat:no-repeat;background-size:80% 100%;overflow:hidden;}
.small-images > .owl-nav > div:hover,.small-images > .owl-nav > div:active,.sub-banner > .owl-nav > div:focus{background-position:center bottom;}
.small-images > .owl-nav > .owl-prev{background-image:url(../images/icon_wht_arrow_left.png);position:absolute;left:0;bottom:40%;left: -27px;}
.small-images > .owl-nav > .owl-next{background-image:url(../images/icon_wht_arrow_right.png);position:absolute;right:0;bottom:40%;right: -27px;}
@media only screen and (max-width: 767px){
.small-images > .owl-nav > div{width: 23px;height:0;padding-top: 23px;}
}
Get In Touch
Have a question? or perhaps spotted a problem?
Maybe you have something you would like to add. Drop us a line anytime!


