2015-06-22 6 views
0

У меня есть Owl установки карусельного типа этогоКолесо мыши прокрутки огонь только один раз рядом обратного

<div class="owl-carousel"> 
    <div>0</div> 
    <div>1</div> 
    <div>2</div> 
    <div>3</div> 
    <div>4</div> 
    <div>5</div> 
    <div>6</div> 
    <div>7</div> 
    <div>8</div> 
    <div>9</div> 
</div> 

Это JS

var owl = $('.owl-carousel'); 
owl.owlCarousel({ 
    items  : 1, 
    singleItem : true, 
    rewindNav : false, 
    dots  : true, 
}); 
owl.on('mousewheel', '.owl-stage', function (e) { 
    if (e.deltaY<0) { 
     console.log(e.deltaY); 
     owl.trigger('next.owl'); 
    } else { 
     owl.trigger('prev.owl'); 
    } 
    e.preventDefault(); 
}); 

jsFiddle здесь: http://jsfiddle.net/f0yph3aL/

, как вы можете увидеть, если вы перечисляете ваша колесико над красным квадратом, слайды движутся как сумасшедшие. Мне нужно, чтобы огонь next.owl.carousel был только один раз, так что прокруткой мыши можно изменить только +1 слайд.

Я попробовал setTimeout внутри owl.on, попробовал debounce и bind/unbind mousewheel. Возможно, я сделал это неправильно. Спасибо за любой совет.

UPDATE:

Вот unbinded MouseWheel, который прекрасно работает, но я не знаю, хо связать колесика мыши снова после некоторого промежутка времени (setTimeout) http://jsfiddle.net/cz122kk6/1/

+0

Он работает нормально, может я знаю, в каком браузере вы тестируете. – stanze

+0

Opera, Chrome, FIrefox .. если я делаю большой свиток с колесиком мыши, он прокручивается от 0 до 9 .. но если я немного прокручу, он прокрутит только один слайд. Мне нужно запустить этот триггер, независимо от того, как далеко я прокручиваю колесико мыши. – 5ulo

ответ

1

Вы можете установить флаг для переходов и изменить его во время перехода/завершения. Вот код сценария:

$('.owl-carousel').each(function(i) { 
    var owl = $(this); 
    owl.owlCarousel({ 
     items: 1, 
     singleItem: true, 
     rewindNav: false, 
     dots: true, 
    }); 
    var allowTransitionLeft = false; 
    var allowTransitionRight = true; 
    owl.on('mousewheel', '.owl-stage', function (e) { 
     e.preventDefault(); 
     if (e.deltaY < 0) { 
      if(allowTransitionRight) { 
       allowTransitionRight = false; 
       owl.trigger('next.owl'); 
      }; 
     } else { 
      if (allowTransitionLeft) { 
       allowTransitionLeft = false; 
       owl.trigger('prev.owl'); 
      }; 
     } 
    }).on('translated.owl.carousel', function (e) { 
     allowTransitionRight = (e.item.count > e.item.index); 
     allowTransitionLeft = (e.item.index > 0); 
    }); 
}); 

Вы можете увидеть его в Updated Fiddle.

При завершении перехода слайдов translated.owl.carousel событие увольняется. Там мы выбрали, какой переход разрешен на основе индекса активных позиций Carousel.

Список Сова Carousel 2 событий here.

EDIT: Теперь работает для нескольких экземпляров.

+0

вы сэр, гений! большое вам спасибо! :) – 5ulo

+0

Существует проблема с несколькими экземплярами совы, проверьте обновленную скрипку http://jsfiddle.net/f0yph3aL/8/, как вы можете видеть, когда вы закончите на 9-м слайде и перейти в другой раздел, прокрутка мыши не запускается. – 5ulo

+1

Не настоящая проблема, проверьте обновленный сценарий выше. – skobaljic

0
owl.owlCarousel({ 
    items  : 1, 
    singleItem : true, 
    rewindNav : false, 
    dots  : true, 
    loop: true, 
    smartSpeed: 1000, 
}); 

Done :)

+0

Nope :(Если я прокручиваю колесо мыши сверху вниз, он срабатывает два раза, поэтому нет, замедление скорости слайдов не является решением. Я знаю, что трюк находится в deltaY (mousewheel). – 5ulo

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

  • Нет связанных вопросов^_^