Scroll на JavaScript не работает

129
06 мая 2019, 16:10

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

window.onscroll = function() {
            var scrolled = document.documentElement.scrollTop;
            if (scrolled >= document.documentElement.clientHeight){
                up.classList.remove("dnone");
                down.classList.add("dnone");
            }
        }
        function windowScroll(){
            var event = window.event.target;
             if (event.id == 'up'){
                 up.classList.add("dnone");
                 down.classList.remove("dnone");
                 var oldScroled = document.documentElement.scrollTop;
                 alert (oldScroled); // число
                 window.scrollTo(0,0);
             } else  if (event.id == 'down'){
            alert (oldScroled); // underfined
            window.scrollTo(oldScroled);
         }
        }

Не работает скрол вниз. Попробывала просто вывети положение - при нажатие на кнопку вверх оно выводит число, а при нажатии кнопки вниз - underfined, как будто бы не видит переменную.

Answer 1

Как правильно сказал @hindmost, это происходит из-за того, что вы объявляете oldScroled в одной области видимости f (event.id == 'up'){...}, а потом пытаетесь к нему обратиться в другой else if (event.id == 'down'){...}.

Следовательно, вам нужно объявить oldScroled где-нибудь выше и вне функции windowScroll. Например так:

var oldScroled; 
 
window.onscroll = function() { 
    var scrolled = document.documentElement.scrollTop; 
    if (scrolled >= document.documentElement.clientHeight) { 
        up.classList.remove("dnone"); 
        down.classList.add("dnone"); 
 
    } 
} 
 
function windowScroll() { 
    var event = window.event.target; 
    if (event.id == 'up') { 
        up.classList.add("dnone"); 
        down.classList.remove("dnone"); 
        oldScroled = document.documentElement.scrollTop; 
        window.scrollTo(0, 0); 
    } else if (event.id == 'down') { 
        window.scrollTo(oldScroled); 
    } 
}

READ ALSO
Меняя чекбокс, менять значение поля в объекте. Angular 4

Меняя чекбокс, менять значение поля в объекте. Angular 4

Есть таблица, строки которой динамически формируются из массиваБольшинство колонок - это характеристики "да/нет"

121
Отправка POST запроса на сторонний сервер

Отправка POST запроса на сторонний сервер

Необходимо оправить JSON объект на сторонний сервер и получить от него ответАутентификация пользователя на сервере организована с помощью...

149