Как обработать некоторые события, чтоб owl-carousel смотрелась корректно?

607
12 ноября 2017, 16:20

Ситуация следующая, есть слайдер - каждый слайд в нём сдвинут влево (это нужно, чтоб кусочек следующего слайда был виден) и стоит бесконечная прокрутка (loop: true - если поставить false, то на последнем слайде получится пустое пространство справа).

Попытался я перенести 3 события owl-carousel:

  1. Клик по "Слайд 1, Слайд 2" и т.д. - соответственно при клике слайдер листается к определенному слайду (всё привязано к позициям)

  2. Перетягивание мышкой (drag) - так же в соответствии с позициями .nav span делался активным.

  3. Клики по стрелкам - опять же .nav span делался активным. (Почему то в примере не работает клик назад - класс не меняется)

Всё это достаточно хорошо работает при loop: false - то есть если карусель не бесконечная, но если она бесконечная (loop: true), то каждому айтему делается клон и весь мой код ломается.

Как всё это дело поправить, чтоб оно выглядело как при loop: false ?

Все пункты делал своими скудными знаниями по js/jquery (за 3ий пункт спасибо Как последовательно переключить active?).

P.S. И подскажите с 3им пунктов, когда на Слайд 3 вешается active - то если еще раз нажать он там и останется, как его сбросить на 1 ?

var owl = $('.slider'); 
owl.owlCarousel({ 
	items: 1, 
	margin: 0, 
  loop: true, // Если поменять на false, то вроде бы всё ок 
  autoWidth:true, 
  dots: false, 
  nav: true, 
}); 
 
// При клике дается активный класс заголовкам  
$('.nav span').click(function() { 
	$('.nav span').removeClass('active'); 
  $(this).addClass('active'); 
}); 
 
// Переходит к слайдеру в соответствии с позицией 
$('.nav span:nth-child(1)').click(function() { 
  owl.trigger('to.owl.carousel', [0, 300]); 
}); 
$('.nav span:nth-child(2)').click(function() { 
  owl.trigger('to.owl.carousel', [1, 300]); 
}); 
$('.nav span:nth-child(3)').click(function() { 
  owl.trigger('to.owl.carousel', [2, 300]); 
}); 
 
// При драге меняем класс 
owl.on('dragged.owl.carousel', function(event) { 
	var in_owl = event.item.index; 
	 if (in_owl == 0) { 
   		$('.nav span').removeClass('active'); 
   		$('.nav span:nth-child(1)').addClass('active'); 
   } else if (in_owl == 1) { 
   		$('.nav span').removeClass('active'); 
   		$('.nav span:nth-child(2)').addClass('active'); 
   } else { 
   		$('.nav span').removeClass('active'); 
   		$('.nav span:nth-child(3)').addClass('active'); 
   } 
}); 
 
// Клики на стрелки 
$(".owl-prev, .owl-next").click(function(){    
    $a = $(".nav span.active"); 
    $x = $(this).hasClass('prev') ? $a.prev() : $a.next();  
  
    if($x.length > 0){       
      $x.add($a).toggleClass('active');       
    } 
});
.nav .active { 
  color: blue; 
} 
 
.nav span { 
  cursor: pointer; 
} 
 
.slider { 
  max-width: 300px; 
} 
 
.slider .slide-item { 
  margin-left: -50px; 
}
<script 
  src="https://code.jquery.com/jquery-3.2.1.min.js" 
  integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" 
  crossorigin="anonymous"></script> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.2.1/owl.carousel.min.js"></script> 
<link href="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.2.1/assets/owl.theme.default.min.css" rel="stylesheet"/> 
<link href="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.2.1/assets/owl.carousel.min.css" rel="stylesheet"/> 
 
 
<div class="nav"> 
  <span class="active">слайд 1</span> 
  <span>слайд 2</span> 
  <span>слайд 3</span> 
</div> 
 
<div class="slider owl-theme owl-carousel"> 
  <div class="slide-item"> 
    <img src="https://www.macrobusiness.com.au/wp-content/uploads/2011/07/homer-doh-300x300.png" alt="image"> 
  </div> 
  <div class="slide-item"> 
    <img src="https://vokrug.tv/pic/news/6/7/e/b/rsz300x300_67eb42057311db5650ba705e21178207.jpeg" alt="image"> 
  </div> 
  <div class="slide-item"> 
    <img src="http://likegif.com/wp-content/uploads/2012/10/homer-gif-12.gif" alt="image"> 
  </div> 
</div>

READ ALSO
Размещение элементов на странице

Размещение элементов на странице

ЗдравствуйтеНе очень часто приходилось работать с asp разметкой

340
Расположение элементов на ASP странице

Расположение элементов на ASP странице

Есть на страничке таблицаИ для каждого поля в которое нужно вводить информацию есть текст бокс

283
background-attachment: fixed для слайдера

background-attachment: fixed для слайдера

Хочу в этом слайдере фон сделать фиксированным с помощью background-attachment: fixed;Для первого слайда срабатывает, для последующих - нет(вместо картинки...

259
Как изменить href?

Как изменить href?

У меня есть новостной сайтНа главной странице есть список новостей

267