2015-07-05 2 views
5

У меня полноэкранный слайдер и вы хотите включить навигацию с помощью колеса мыши. Чтобы обнаружить событие с колесиком мыши, я подумал, что оптимальным вариантом является плагин jQuery mousewheel.jQuery настройка плагинов колесика мыши

Я могу включить его и функции огня. Но я не могу (и не нашел никаких ресурсов), чтобы настроить его так, как я хочу.

Я хочу проверить наличие определенного количества прокрученных пикселей. Итак, если, например, колесо мыши попытается прокрутить 20px up, я хочу запустить функцию, или 20px down для другой функции.

​$(document).ready(function(){ 
    $('body').bind('mousewheel', function(e){ 
     if(e.originalEvent.wheelDelta /120 > 0) { 
      alert('Wait! I fire way too often!'); 
     } 
     else{ 
      alert('We are going down, way too msuch alerts!'); 
     } 
    }); 
}); 

JS FIDDLE (Прокрутка вверх/вниз)

ответ

3

Если я правильно понимаю вашу проблему правильно, вы видите огонь события слишком часто. Проблема здесь в том, что для любого заданного действия прокрутки событие срабатывает несколько раз. Вы можете увидеть это, если открыть консоль разработчика в своем браузере и сделать console.log(e.originalEvent.wheelDelta). Это может сломать большой свиток на несколько небольших событий прокрутки, отбросив ваше желаемое поведение. Путь я обращался с этим было использовать переменную для прокрутки дельта:

$(document).ready(function(){ 
    var scrollPixels = 0; // variable to store scroll delta 

    $('body').bind('mousewheel', function(e){ 
     // increment/decrement scroll delta 
     scrollPixels += e.originalEvent.wheelDelta; 
     console.log(scrollPixels); 

     if (scrollPixels < -20) { 
      scrollPixels = 0; // clear scroll delta 
      alert('Coming down!'); 
     } 
     else if (scrollPixels > 20){ 
      scrollPixels = 0; // clear scroll delta 
      alert('Coming up!'); 
     } 
    }); 
}); 

Вы можете очистить дельту прокрутки после вверх или вниз предупреждения пожаров.

JS Fiddle

Вы также можете увеличить свой тест на более чем 20 пикселей, поскольку большинство свитков будет срабатывать это событие - 20 пикселей составляет лишь около 1/4 дюйма.

Надеюсь, что это поможет. Если это не исправить вашу проблему, не стесняйтесь комментировать, где я ошибся. Удачи!


Обновление адреса комментарий:

Вы можете подождать, пока свиток не останавливается, установив тайм-аут, который будет ждать короткий промежуток времени (250 мс в данном примере) после того, как скроллинг прекратил выполнение. Я переехал логику в этом тайм-аут, так что он будет работать только после того, как скроллинг остановился:

$(document).ready(function(){ 
    var scrollPixels = 0; // variable to store scroll delta 
    var scrolling; // timeout function var 

    $('body').bind('mousewheel', function(e){ 
     // increment/decrement scroll delta 
     scrollPixels += e.originalEvent.wheelDelta; 
     console.log(scrollPixels); 

     clearTimeout(scrolling); 
     scrolling = setTimeout(function() { 
     console.log('stop wheeling! ', scrollPixels); 
     scrolling = undefined; 

     if (scrollPixels < -300) { 
      scrollPixels = 0; // clear scroll delta 
      alert('Coming down!'); 
     } 
     else if (scrollPixels > 300){ 
      scrollPixels = 0; // clear scroll delta 
      alert('Coming up!'); 
     } 

    }, 250); 
    }); 
}); 

Обновлено JS Fiddle

+0

Эй, большое спасибо за ваше время! Это близко к тому, что я ищу. Я увеличил значение и сохранил его в var (http://jsfiddle.net/marianrick/t7y3aLfh/3/). Как только я прокручусь очень быстро (один раз), я получаю это предупреждение для каждого '300px'. Есть ли возможность запускать его только один раз (даже если было прокручивается 2000 пикселей), пока не закончится событие прокрутки? (Вы можете проверить сайт в прямом эфире: http://img.hiamovi-client.com - Я хочу прокрутить вниз по одному слайду при прокрутке) –

+0

Привет, Мариан, рад, что я мог бы помочь. Я добавил второй блок кода и скрипку, в которой должен быть указан ваш комментарий. Дайте мне знать, если это поможет! – grdevphl

+0

Большое спасибо за эту настройку! «250» - довольно заметная задержка при использовании сайта. Установка его на '50' уже работает как шарм. –

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