2016-10-12 2 views
0

Я сижу на базовом слайдере jQuery, чтобы немного узнать о разработке плагина в jquery.Основная обработка событий слайдера

Что он делает:

  • скользит справа налево
  • , когда мышь попадает в интервал очищается и анимация останавливается
  • когда мышь покидает интервал перезапускает

Но вот в чем проблема:

Когда я постоянно вхожу и оставляю слайдер, аниматор выполняли функции разломов слайдов. анимация загрузки продолжается по назначению.

Я считаю, что это не лучшая идея, что прослушивание слуха происходит на mouseenter и leave. подумал о кнопках, которые справляются с этим, но, возможно, что-то другое совершенно не так/глупо здесь. :)

здесь смотрите: here:

ответ

0

Вы забыли очистить таймаута и тормозную Slider перед тем init() (старт) снова

Я обновил свои fiddle

Изменения:

var interval, timeout; 

function stopSlider() { 
    console.log("function: stopSlider");   
    clearTimeout(timeout); 
    clearInterval(interval);   
} 

$('.slides').on('mouseenter', function() { 
    stopSlider(); 
}).on('mouseleave', function() { 
    stopSlider(); 
    timeout = setTimeout(init, pause); 
}); 

function startSlider() { 
    // just a tip 
    // $('.loading').animate({"width": "0"}, 0); // makes no sense, use instead .css() 
    $('.loading').css('width', '0'); 
    ... 
} 
+0

Ничего себе. Это очень помогло. Мне нужно прочитать об этой функции clearTimeout и когда ее использовать. Таким образом, это означает, что тайм-аут уволен и уволен и снова запущен, и никто не очищается. но поведение странно. я бы предположил, что таймауты собираются и обрабатываются последовательно. – mayo83

+0

Добро пожаловать :) Правильно. Тайм-аут срабатывает снова и снова. Основная проблема заключалась в том, что вы сначала запустили свою мышь 'mouseenter', которая запускает уже новый тайм-аут, который также запускает новый интервал (новый идентификатор procress' 2'). Теперь вы запускаете 'mouseleave' и очищаете только первый (инициализированный идентификатор id_1), но не интервал, который мы начинаем раньше (тайм-аут с 3 сек.). – pleinx

0

Вместо очистки интервал, вы можете попробовать использовать флаги для управления Stop и Go вашей анимации. Использование ClearInterval для остановки анимации и возобновления ее путем создания нового интервала - это не контроль над ним. Что-то вроде приведенного ниже может оказаться полезным для вашего дела и помочь вам в другом направлении. :

<div id='mySlider' style='width:200px;height:40px;background-color:blue;'></div> 
 
<script> 
 
    var mySlider = document.getElementById('mySlider'); 
 
    var isOver = true; 
 

 
    mySlider.addEventListener('mouseenter' , function(){ 
 
    isOver = false; 
 
    }); 
 
    
 
    mySlider.addEventListener('mouseout' , function(){ 
 
    isOver = true; 
 
    }); 
 

 
    var myID = setInterval(function(){ 
 
    if(isOver === false) 
 
     mySlider.style.width = parseInt(mySlider.style.width) + 1 + "px"; 
 
    },10); 
 

 
</script>

Смежные вопросы