Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Изменение скорости скрола страницы (https://javascript.ru/forum/dom-window/55089-izmenenie-skorosti-skrola-stranicy.html)

Drm1804 13.04.2015 17:04

Изменение скорости скрола страницы
 
Доброго времени суток. Имеется скрипт, который делает делает прокрутку страницы до якоря плавной.
function smoothlyScroll(){
    var linkNav = document.querySelectorAll('.b-head-nav-item');
    var speed = .5;
    for( i=0 ; i < linkNav.length; i++){
        linkNav[i].addEventListener('click', function(){
            var scrollTop = window.pageYOffset;
            var hash = this.href.replace(/[^#]*(.*)/, '$1');
            var elemToScroll = document.querySelector(hash).getBoundingClientRect().top;
            var start = null;

            requestAnimationFrame(step);
            function step(time){
                console.log(time);
                if (start === null){
                    start = time;
                }
                var progress = time - start;
                console.log(progress);

                var distance = (elemToScroll < 0
                    ? Math.max(scrollTop - progress/speed, scrollTop + elemToScroll)
                    : Math.min(scrollTop + progress/speed, scrollTop + elemToScroll) );

                window.scrollTo(0,distance);
                if(distance != scrollTop + elemToScroll){
                    requestAnimationFrame(step);
                } else {
                    location.hash = hash;
                }
            }
            return false;
        } ,false);


    }
}

проблема в том, что хотелось бы сделать скорость прокрутки разной. Т.е. сначала побыстрее, а ближе к концу чтобы скорость замедлялась

Brutus 13.04.2015 20:49

Знакомься с анимацией https://learn.javascript.ru/js-animation

http://jsfiddle.net/xo0ywg88/2/ вот и пример


Часовой пояс GMT +3, время: 05:20.