window.onload = function работает только в отладчике

290
23 ноября 2017, 05:10

Подскажите COMPADRES, где-то налажал.

Задача: С интервалом в 20 секунд спускаться вниз на document.documentElement.clientHeight, далее при достижении конца страницы, с временной задержкой, переходить обратно в топ.

Пока имею следующие проблемы и следующий код

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

Так же, после интервала ставлю условие , если достигли футера то делаем скролл в топ. Он так же не происходит

window.onload = function down() {
                var idInt = setInterval(function() {
                    for (j = 0; j < 6; j++) {
                        window.scrollBy({
                            top : document.documentElement.clientHeight,
                            left : 0,
                            behavior : 'smooth'
                        });
                    }
                    clearInterval(idInt);
                }, 1000);
                if (window.scrollTop == document.height - window.height) {
                    window.scrollBy({
                        top : 0,
                        left : 0,
                        behavior : 'smooth'
                    });
                }
            }
Answer 1

Вот что получилось:

function down() {
var idInt = setInterval(function() {
    window.scrollBy({
        top: document.documentElement.clientHeight,
        left: 0,
        behavior: 'smooth'
    });
    if (window.pageYOffset + window.innerHeight == getDocHeight()) {
        window.scrollTo(0, 0);
        clearInterval(idInt);
    }

}, 20000)};

В интервале указываешь нужный интервал с которым будет скролить на высоту экрана.

Функция получения высоты страницы (взята от сюда: https://stackoverflow.com/a/10795797/8978945) :

function getDocHeight() {
    return Math.max(
        document.body.scrollHeight, document.documentElement.scrollHeight,
        document.body.offsetHeight, document.documentElement.offsetHeight,
        document.body.clientHeight, document.documentElement.clientHeight
    );
}
Answer 2

Благодарю что помогли и подсказали. С прокруткой в конец страницы. С прокруткой вверх нашел решение тут https://stackoverflow.com/questions/37934091/why-is-the-document-height-equal-to-window-inner-height-pageyoffset

В итоге получилось так

var windowHeight = "innerHeight" in window ? window.innerHeight : document.documentElement.offsetHeight;
            var body = document.body, html = document.documentElement;
            var docHeight = Math.max(body.scrollHeight, body.offsetHeight,
                    html.clientHeight, html.scrollHeight, html.offsetHeight);
            var windowBottom = windowHeight + window.pageYOffset;
            window.onload = function down() {
                var idInt = setInterval(function() {
                    window.scrollBy({
                        top : document.documentElement.clientHeight,
                        left : 0,
                        behavior : 'smooth'
                    });
                    if (pageYOffset >= docHeight - window.innerHeight - 1) {
                        window.scrollTo(0, 0);
                        clearInterval(idInt);
                    }
                }, 1000)
            };
READ ALSO
Меняем Background через javascript

Меняем Background через javascript

На сайте несколько dropdown селекторов, каждое из выбранных селекторов сохроняю в сессиюТак же нужно менять background самого селектора у которого...

300
Как написать по новому стандарту es6?

Как написать по новому стандарту es6?

Не могу разобраться в рендеринг, застрял в авторизации, что как пишу я так не рендерит, выходит ошибка

338
Проверка 2 и более input на disabled

Проверка 2 и более input на disabled

Есть 2 инпута, в них вводятся значения, при верном значении input получает disabledНужна, проверка в реальном времени, если оба disabled, происходило...

283