Cleartimeout не будет работать - PullRequest
       1

Cleartimeout не будет работать

0 голосов
/ 24 января 2012

Я пытаюсь улучшить этот плагин добавив обработчики событий для переключения воспроизведения / остановки, когда вы нажимаете мышью / оставляете мышью на слайде. Я видел множество людей, имеющих такую ​​же проблему с функциями js setTimeout и clearTimeout, и у меня тоже есть проблема. Это то, что у меня есть

var autoplay;
container.mouseenter(function(){
    autoplay = setTimeout(function() {
        slide('next');
    }, config.auto);
    console.log('play');
}).mouseleave(function(){
    clearTimeout(autoplay);
    console.log('stop');

});

Слайды начинают появляться в мышином центре, но не останавливаются, когда я делаю отпуск мышью. Что я делаю не так? Это недоразумение области? Я не знаю, что мне не хватает.

1 Ответ

3 голосов
/ 24 января 2012

Я не вижу причин, по которым ваш код не будет работать при условии, что container содержит точно один соответствующий элемент ( рабочий пример ). Если есть вероятность, что он может соответствовать более чем одному элементу, у вас будет несколько элементов, совместно использующих один и тот же дескриптор таймера autoplay, и это станет чем-то вроде беспорядка. Если это так, используйте data, чтобы сохранить дескриптор фактически для элемента, на котором произошло событие мыши:

container.mouseenter(function(){
    $(this).data("autoplay", setTimeout(function() {
        slide('next');
    }, config.auto));
    console.log('play');
}).mouseleave(function(){
    var autoplay = $(this).data("autoplay");
    if (autoplay) {
        clearTimeout(autoplay);
    }
    console.log('stop');
});

Живой пример

Отдельно, вероятно, стоит очистить autoplay (где бы вы его ни хранили), когда срабатывает таймер, так что вы знаете, что у вас нет ожидающего таймера.

...