@Dark19

Как вернуть скорость прокрутки в исходное положение?

Здравствуйте. Мне нужно замедлять прокрутку скролла на некоторых участках сайта и потом после каждого из таких участков возвращать скорость прокрутки к стандартной для браузера. Так вот замедляю я таким кодом её:
function slowScroll() {
        var latestKnownScrollY = $('html').scrollTop() || $('body').scrollTop();
        $(window).on("scroll", function () {
            latestKnownScrollY = $('html').scrollTop() || $('body').scrollTop();
        });
        $(window).on("mousewheel DOMMouseScroll", function(event) {
            var scrollTo,
                scrollDistance  = 80,
                delta;
            if (event.type == 'mousewheel') {
                delta    = event.originalEvent.wheelDelta / 100;
            } else if (event.type == 'DOMMouseScroll') {
                delta    = - event.originalEvent.detail / 3;
            }
            scrollTo = latestKnownScrollY - delta * scrollDistance;
            if (scrollTo) {
                event.preventDefault();
                event.stopPropagation();
                $('body,html').stop().animate( {
                    scrollTop : scrollTo
                } , 500);
            }
        } );
    }

Но как вернуть к стандартной скорости, я понимаю, что нужно написать обратную функцию, но какие там должны быть параметры? или может есть способ попроще?
  • Вопрос задан
  • 260 просмотров
Решения вопроса 1
aleksand44
@aleksand44
Думаю все дело в том, что чтобы удалить обработчик нужно передать именно ту же функцию что и была передана при назначении. Для этого вам нужно ссылаться на одну и ту же функцию. Попробуйте обернуть функцию-обработчик в именованную функцию, т.е. вам нужно объявить ее
function handler(event){
                var scrollTo,
                scrollDistance  = 80,
                delta;
            if (event.type == 'mousewheel') {
                delta    = event.originalEvent.wheelDelta / 100;
            } else if (event.type == 'DOMMouseScroll') {
                delta    = - event.originalEvent.detail / 3;
            }
            scrollTo = latestKnownScrollY - delta * scrollDistance;
            if (scrollTo) {
                event.preventDefault();
                event.stopPropagation();
                $('body,html').stop().animate( {
                    scrollTop : scrollTo
                } , 500);
            }
}


и применять вот таким образом
$(window).on("mousewheel DOMMouseScroll" , handler() )

После этого вы можете просто отключить этот обработчик.
Как-то типа так:
$(window).off("mousewheel DOMMouseScroll" , handler() )
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы