Сброс длинного скрола mousewheel
Приветствую.
Есть обработчик на jquery.mousewheel, который при скроле мыши пролистывает страницу к предыдущему/следующему диву. Неудобство в том, что при резком (длинном) прокручивании скрола происходит переход сразу на несколько элементов: следующий/предыдущий + еще несколько, в зависимости от интенсивности прокручивания. Как можно это побороть, чтобы при одном прокручивании скрола переходило к следующему элементу, и последующие скролы блокировались? Есть идея отслеживать время между скролами и если оно меньше секунды - то обработчик перехода не выполнять. Но как это реализовать - что-то никак не соображу |
Как вариант:
1. до скроллинга: 1.a. запомнить текущую позицию $(document).scrollTop() 1.b. запомнить текущий div, скажем это $('#old-div-id') (сделать это можно разными способами) 2. после скроллинга: 2.a. получить новую позицию $(document).scrollTop() 3. понять в какую сторону двигались (сравнить пункты 1.a и 2.a) 4. смотря в какую сторону движемся (вверх или вниз): 4.a. если вверх, то найти div, который находился перед уже посещённым (пункт 1.b): $('#old-div-id').prev() 4.b. если вниз, то найти следующий: $('#old-div-id').next() 5. получить позицию этого нового div, $('#new-div-id').offset().top 6. если пункт 2.a меньше (или больше, зависит от пункта 3), чем пункт 5, значит мы проскроллили дальше чем нужно. значит смотрим пункт 7. 7. принудительно переместиться к div, найденному в пункте 4. 8. установить новые данные для пунктов 1.a и 1.b. Для события $(window).scroll() этот метод тоже будет работать. . |
Часовой пояс GMT +3, время: 05:48. |