время изменения слайдера в owl carousel

341
26 мая 2017, 14:47

Написал скрипт, но он работает криво. Когда слайды автоматически меняются(каждые 6 сек), то все работает отлично, то есть у нас заполняется загрузка от 0% - 100%, но когда мы нажмем на prev или next кнопку, то полоса загрузки не обнуляет предыдущее время, но и одновременно начинает считать с 0%, то есть у нас получается несколько полос в одной, как это можно исправить? js:

 var owl = $('#sliderTop');
function timeCounter() {
        var numSec = 0,
            totalTime = 0,
            loader = 0;
        setInterval(counter, 60);
        function counter() {
            if (numSec > 99) {
                return false;
            } else {
                totalTime += 1;
                numSec = parseInt(totalTime);
                loader = numSec + "%";
            }
            $(".load").css("width", loader);
        };
    }
        owl.on('initialized.owl.carousel', function(event) {
            timeCounter();
        });
        owl.owlCarousel({
            items: 1,
            autoplay: true,
            autoplayTimeout: 6000,
            mouseDrag: false,
            loop: true,
            nav: true,
            navText : ["<i class='fa fa-angle-up'></i>","<i class='fa fa-angle-down'></i>"],
            animateOut: 'fadeOut',
            dots: true,
            responsive : {
                768 : {
                    dots: false
                }
            }
        });
    $("#sliderTop .owl-prev").after("<div class='load-time'><div class='load'></div></div>");
    owl.on('changed.owl.carousel', function(property) {
            timeCounter();
        });
Answer 1

Вам нужно отменить предыдущий таймер, прежде, чем создавать новый:

clearInterval(st)
st= setInterval(counter, 60);

var owl = $('#sliderTop'); 
var st; 
 
function timeCounter() { 
  var numSec = 0, 
    totalTime = 0, 
    loader = 0; 
 
  clearInterval(st) 
  st= setInterval(counter, 60); 
 
  function counter() { 
    if (numSec > 99) { 
      return false; 
    } else { 
      totalTime += 1; 
      numSec = parseInt(totalTime); 
      loader = numSec + "%"; 
    } 
    $(".load").css("width", loader); 
  }; 
} 
 
owl.on('initialized.owl.carousel', function(event) { 
  timeCounter();  
}); 
 
 
owl.owlCarousel({ 
  items: 1, 
  autoplay: true, 
  autoplayTimeout: 6000, 
  mouseDrag: false, 
  loop: true, 
  nav: true, 
  navText: ["<<<", ">>>>"], 
  animateOut: 'fadeOut', 
  dots: true, 
  responsive: { 
    768: { 
      dots: false 
    } 
  } 
}); 
$("#sliderTop .owl-prev").after("<div class='load-time'><div class='load'></div></div>"); 
 
 
 
owl.on('changed.owl.carousel', function(property) { 
  timeCounter(); 
});
.load{border-top:4px solid red}
<link href="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.2.1/assets/owl.theme.default.css" rel="stylesheet"/> 
<link href="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.2.1/assets/owl.carousel.min.css" rel="stylesheet"/> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.2.1/owl.carousel.js"></script> 
 
<div class="owl-carousel" id="sliderTop"> 
  <div>1</div> 
  <div>2</div> 
  <div>3</div> 
  <div>4</div> 
</div>

READ ALSO
Получение аудио-стрима через Chrome Extension

Получение аудио-стрима через Chrome Extension

Нужно получить аудио-стрим микрофона (не звука во вкладке, а именно микрофона) через расширение ChromeОбычный navigator

445
Как получить текст из редактора?

Как получить текст из редактора?

Использую этот редактор

380
Медленная загрузка JavaScript на IIS 10

Медленная загрузка JavaScript на IIS 10

Приветствую! У меня на IIS 10 есть 10 JS файлов по 5-10 КБПри заходе на сайт (Если пользователь не имеет кэша (То есть CTRL+ F5)) сайт грузит по 10-20 секунд...

277
Не работает ajax-функция для валидации

Не работает ajax-функция для валидации

Есть страница регистрации, выглядит следующим образом:

483