Owl carousel with thumbs

by inadcod

HTML

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.0.0-beta.3/assets/owl.carousel.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.0.0-beta.3/assets/owl.theme.default.min.css">
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.0.0-beta.3/owl.carousel.min.js"></script>
<div id="sync1" class="owl-carousel owl-theme">
  <div class="item"><img src="https://dl.dropboxusercontent.com/u/64049693/owl/fullimage4.jpg"></div>
  <div class="item"><img src="https://dl.dropboxusercontent.com/u/64049693/owl/fullimage5.jpg"></div>
  <div class="item"><img src="https://dl.dropboxusercontent.com/u/64049693/owl/fullimage6.jpg"></div>
  <div class="item"><img src="https://dl.dropboxusercontent.com/u/64049693/owl/fullimage7.jpg"></div>
  <div class="item"><img src="https://dl.dropboxusercontent.com/u/64049693/owl/fullimage1.jpg"></div>
  <div class="item"><img src="https://dl.dropboxusercontent.com/u/64049693/owl/fullimage2.jpg"></div>
  <div class="item"><img src="https://dl.dropboxusercontent.com/u/64049693/owl/fullimage3.jpg"></div>
</div>
<div id="sync2" class="owl-carousel owl-theme">
  <div class="item"><img src="https://dl.dropboxusercontent.com/u/64049693/owl/fullimage4.jpg"></div>
  <div class="item"><img src="https://dl.dropboxusercontent.com/u/64049693/owl/fullimage5.jpg"></div>
  <div class="item"><img src="https://dl.dropboxusercontent.com/u/64049693/owl/fullimage6.jpg"></div>
  <div class="item"><img src="https://dl.dropboxusercontent.com/u/64049693/owl/fullimage7.jpg"></div>
  <div class="item"><img src="https://dl.dropboxusercontent.com/u/64049693/owl/fullimage1.jpg"></div>
  <div class="item"><img src="https://dl.dropboxusercontent.com/u/64049693/owl/fullimage2.jpg"></div>
  <div class="item"><img src="https://dl.dropboxusercontent.com/u/64049693/owl/fullimage3.jpg"></div>
</div>

CSS

#sync1 .item {
  background: #fff;
  padding: 0;
  margin: 5px;
  color: #FFF;
  border-radius: 3px;
  text-align: center;
}
#sync2 .item {
  background: #fff;
  padding: 0;
  margin: 5px;
  color: #FFF;
  border-bottom: 2px solid #ccc;
  text-align: center;
  cursor: pointer;
}
#sync2 .current .item {
  border-bottom: 2px solid #0c83e7;
}
.owl-theme .owl-nav {
  /*default owl-theme theme reset .disabled:hover links */
}
.owl-theme .owl-nav [class*='owl-'] {
  -webkit-transition: all .3s ease;
  transition: all .3s ease;
}
.owl-theme .owl-nav [class*='owl-'].disabled:hover {
  background-color: #D6D6D6;
}
#sync1.owl-theme {
  position: relative;
}
#sync1.owl-theme .owl-next,
#sync1.owl-theme .owl-prev {
  width: 22px;
  height: 40px;
  margin-top: -20px;
  position: absolute;
  top: 50%;
}
#sync1.owl-theme .owl-prev {
  left: 10px;
}
#sync1.owl-theme .owl-next {
  right: 10px;
}

JavaScript

$(document).ready(function() {

  var sync1 = $("#sync1");
  var sync2 = $("#sync2");
  var slidesPerPage = 4; //globaly define number of elements per page
  var syncedSecondary = true;

  sync1.owlCarousel({
    items : 1,
    slideSpeed : 2000,
    nav: true,
    autoplay: true,
    dots: true,
    loop: true,
    responsiveRefreshRate : 200,
    navText: ['<svg width="100%" height="100%" viewBox="0 0 11 20"><path style="fill:none;stroke-width: 1px;stroke: #000;" d="M9.554,1.001l-8.607,8.607l8.607,8.606"/></svg>','<svg width="100%" height="100%" viewBox="0 0 11 20" version="1.1"><path style="fill:none;stroke-width: 1px;stroke: #000;" d="M1.054,18.214l8.606,-8.606l-8.606,-8.607"/></svg>'],
  }).on('changed.owl.carousel', syncPosition);

  sync2
    .on('initialized.owl.carousel', function () {
      sync2.find(".owl-item").eq(0).addClass("current");
    })
    .owlCarousel({
    items : slidesPerPage,
    dots: false,
    nav: true,
    smartSpeed: 200,
    slideSpeed : 500,
    slideBy: slidesPerPage, //alternatively you can slide by 1, this way the active slide will stick to the first item in the second carousel
    responsiveRefreshRate : 100
  }).on('changed.owl.carousel', syncPosition2);

  function syncPosition(el) {
    //if you set loop to false, you have to restore this next line
    //var current = el.item.index;
    
    //if you disable loop you have to comment this block
    var count = el.item.count-1;
    var current = Math.round(el.item.index - (el.item.count/2) - .5);
    
    if(current < 0) {
      current = count;
    }
    if(current > count) {
      current = 0;
    }
    
    //end block

    sync2
      .find(".owl-item")
      .removeClass("current")
      .eq(current)
      .addClass("current");
    var onscreen = sync2.find('.owl-item.active').length - 1;
    var start = sync2.find('.owl-item.active').first().index();
    var end = sync2.find('.owl-item.active').last().index();
    
    if (current > end) {
     ...