JavaScript scrollTo метод ничего не делает?
Итак, я desperatley пытается получить некоторые функции прокрутки для работы на странице. После того, как я не повезло, я решил просто прикрепить window.scrollTo(0, 800);
на моей странице, чтобы увидеть, могу ли я пропустить прокрутку. Ничего не происходит. У меня есть аккордеон, который расширяется, а затем я хочу прокрутить его до определенного элемента. Но на данный момент я был бы рад просто увидеть прокрутку. Кто-нибудь сталкивается с этим?
Спасибо!
Ответы
Ответ 1
Мне удалось решить эту проблему, используя метод jQuery animate(). Вот пример реализации, с которым я пошел:
$('#content').animate({ scrollTop: elementOffset }, 200);
Селектор получает div с ID = "content". Затем я применяю метод animate на нем с scrollTop в качестве опции. Второй параметр - это время в миллисекундах для продолжительности анимации. Надеюсь, это поможет кому-то другому.
Ответ 2
Если у вас есть что-то вроде этого:
html, body { height: 100%; overflow:auto; }
Если оба тела и html имеют определение высоты 100%, а также включена прокрутка, window.scrollTo(и все производные механизмы прокрутки) не работают, несмотря на отображение полосы прокрутки (которая может использоваться пользователем), когда содержание превышает 100% роста.
Это потому, что полоса прокрутки вы видите не в окне, а в теле.
Решение:
html { height: 100%; overflow:auto; }
body { height: 100%; }
Ответ 3
Я исправил эту проблему с помощью setTimout. Я использовал angularjs, но, возможно, это может помочь и в vanilla js.
setTimeout(function () {
window.scrollTo(0, 300);
},2);
Ответ 4
Иногда это не просто проблема css, для меня это был браузер. Я должен был решить это с помощью этого кода.
if ('scrollRestoration' in window.history) {
window.history.scrollRestoration = 'manual'
}
Это позволяет разработчику взять на себя ответственность за изменения прокрутки. Подробнее об этом здесь
Ответ 5
У меня была такая же проблема сегодня, а затем я обнаружил, что когда я вынул автоматически созданный блок doctype:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
Window.scrollTo(0,800) начал работать вместе с функцией ExtJs scrollTo(), которую я изначально пытался использовать. Я вернул блок и перестала работать. Я не знаю, было ли это то, с чем вы сталкивались (2 года назад), но, надеюсь, это помогает кому-то другому столкнуться с одной и той же проблемой.
Ответ 6
У меня была такая же проблема. Окно фокусировки до прокрутки у меня работало.
window.focus();
window.scrollTo(0,800);
Ответ 7
проверьте, не помечен ли ваш тег, где вы подключены, прокрутка CSS переполнения [/- x-y]: скрыто.
он исправил ошибку
Ответ 8
Во-первых, ваша страница достаточно велика для прокрутки (даже если она в iframe)? Если нет, или вы не уверены, сделайте гигантский div, а затем положите что-то ниже. Попробуйте прокрутить к нему.
Затем, если ваша прокрутка в iframe, поместите свой код на ту же страницу, что и источник кадра. Таким образом, вам не нужно беспокоиться о том, чтобы получить документ или конкретный элемент в другом окне, что может быть сложно. О да, ты уверен, что правильно понял эту часть? Переход с помощью Firebug может помочь вам в этом.
Наконец, поставьте точку останова (используя Firebug) в строке, которая должна вызвать прокрутку. Он попал в точку останова? Если нет, ваш код не выполняется, и прокрутка не является вашей проблемой.
(Я ответил на это, поддерживая контекст из вашего предыдущего вопроса.)
ИЗМЕНИТЬ:
Прокрутка выполняется окном по окну. Если вы находитесь в кадре, который не может прокручиваться, ничто не будет прокручиваться. Если вы хотите, чтобы этот элемент в кадре был прокручен, получите смещение этого элемента в его текущее окно и добавьте его к смещению содержащего фрейма. Это должно сделать трюк.
Ответ 9
Для меня установка высоты html и body на auto сделала свое дело.
html, body { height: auto }
Ответ 10
Это случилось со мной вчера, потому что у меня был overflow: auto
на div, который был ребенком для <html>
и <body>
.
Итак, я узнал, что для работы window.scrollTo()
необходимо установить overflow: auto
(или что-то еще, overflow-y: scroll
) на элементе <html>
.
Я узнал, что для работы document.body.scrollTo()
необходимо установить overflow
на <body>
.
Я узнал, что вы также можете использовать его на любом другом элементе (если хотите), используя document.querySelector('#some-container').scrollTo()
.
В моем случае я хотел, чтобы window.scrollTo()
работал, поэтому я поместил CSS переполнения на <html>
.
Я удивлен, что здесь нет других ответов о том, "какой именно элемент" можно прокручивать. Корневой HTML-элемент должен быть прокручиваемым, чтобы window.scrollTo()
работал. Все мои дочерние элементы ниже <html>
установлены на height: auto
.
Мой CSS такой:
html { position: absolute; left: 0; top: 0; right: 0; bottom: 0; overflow: auto; }
body { width: 100%; height: auto; }
#app { width: 100%; height: auto; }
Ответ 11
Когда window.scrollTo(x,y)
не работает на консоли браузера, и dom визуализируется после прокрутки, вы можете использовать это.
Для прокрутки на Splash или любом другом сервисе рендеринга JavaScript выполните ниже js:
document.body.style.height = "2000px";
window.scrollTo(0,2000);
В Splash вы можете сделать что-то похожее на это:
assert(splash:wait(10))
assert(splash:runjs("document.body.style.height = '2000px';"))
assert(splash:runjs("window.scrollTo(0,2000);"))
assert(splash:wait(2))
assert(splash:runjs("window.scrollTo(0,0);"))
Ответ 12
Ну, очевидно, что он не будет прокручиваться, если ваша страница не будет (по крайней мере, viewport.height - 800). Вы видите полосу прокрутки? В противном случае вы делаете что-то еще неправильно.
Ответ 13
Возьмите этот код:
http://www.java2s.com/Code/JavaScriptReference/Javascript-Methods/scrollToExample.htm
и сохранить как html файл. Обратите внимание, как он жестко кодирует очень большой div, превышающий окно просмотра браузера. Вероятно, вам нужно добавить контент в нижней части страницы для прокрутки, чтобы даже работать.