Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Скроллинг страницы с остановкой в определенных точках (https://javascript.ru/forum/misc/75490-skrolling-stranicy-s-ostanovkojj-v-opredelennykh-tochkakh.html)

j0hnik 14.10.2018 22:14

Цитата:

Сообщение от alexkirsanov850@gmail.com
очередь событий не быть просто не может и поскольку язык монопоточный она есть

в данном случае многопоточность никак не задействована. работать в один все будет.

j0hnik 14.10.2018 22:17

Цитата:

Сообщение от alexkirsanov850@gmail.com
При скроллинге страницы с целью акцентирования внимания на определенных блоках остановить прокрутку страницы.

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

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

alexkirsanov850@gmail.com 14.10.2018 22:32

сейчас поясню
window.onwheel = function(e) {
    var delta = e.deltaY; //получили значение "смещения"

    var isScrollDown = true;
    if (delta<0) { isScrollDown = false; }//направление прокрутки
    
    var posScroll = window.scrollY + delta; //определили новое положение 
    

//далее пусть например якорный интервал 500-600
    if ((posScroll>500)&&(posScroll<600)) { 
        posScroll = 600;
    }
    window.scrollTo(0, posScroll);
}


А далее происходит следующее: все работает ОК, пока не дойдет до 500. Потом переносимся на 600 как и хотелось, а вот потом...
долетают новые значения deltaY и скроллинг продолжается))) все сползает

Не пойму как решить

alexkirsanov850@gmail.com 14.10.2018 22:40

j0hnik,
пытался скроллить блоками

window.onwheel = function(e) {
    return false;
}

elems = document.getElementsByClassName('cnt');

elems[0].onwheel = function(e){
    var delta = e.deltaY;
    var posScroll = window.scrollY + delta;
    if ((posScroll>500)&&(posScroll<600)){
        elems[1].scrollIntoView();
    } else {window.scrollTo(0, posScroll);}
}

elems[1].onwheel = function(e){
    var delta = e.deltaY;
    var posScroll = window.scrollY + delta;
    if ((posScroll>500)&&(posScroll<600)){
        elems[2].scrollIntoView();
    } else {window.scrollTo(0, posScroll);}
}



Все тоже самое как и в первом случае
перешла на 2 блок и далее догоняет новое deltaY и блок смещается!

рони 14.10.2018 23:34

alexkirsanov850@gmail.com,
https://javascript.ru/forum/dom-wind...tml#post312682

j0hnik 15.10.2018 00:03

Цитата:

Сообщение от alexkirsanov850@gmail.com (Сообщение 496312)
А далее происходит следующее: все работает ОК, пока не дойдет до 500. Потом переносимся на 600 как и хотелось, а вот потом...
долетают новые значения deltaY и скроллинг продолжается))) все сползает

Не пойму как решить

у меня этот код только скролл с рывками производит, что и не удивительно. Родной скролл имеет небольшой транзишин, метод scrollTo() по умолчанию без транзишина.
мб у вас еще где то в коде какие то фичи для скролла?


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