JavaScript метод scrollTo ничего не делает?

Так что я отчаянно пытаюсь заставить некоторые функции прокрутки работать на странице. После того, как мне не повезло, я решил просто вставить window.scrollTo(0, 800); на своей странице, чтобы посмотреть, смогу ли я получить прокрутку. Ничего не происходит У меня есть аккордеон, который расширяется, и затем я хочу прокрутить до определенного элемента с ним. Но сейчас я был бы рад увидеть прокрутку. Кто-нибудь сталкивался с этим?

Спасибо!

29
задан Dan McGrath 8 February 2010 в 20:11
поделиться

12 ответов

Мне удалось решить эту проблему, используя метод jQuery animate (). Вот пример реализации, с которой я пошел:

$('#content').animate({ scrollTop: elementOffset }, 200);

Селектор получает div с ID = "content". Затем я применяю метод animate к нему с опцией scrollTop. Второй параметр - это время в миллисекундах для продолжительности анимации. Я надеюсь, что это поможет кому-то еще.

19
ответ дан Nick 8 February 2010 в 20:11
поделиться

Иногда это не просто проблема css, для меня это был браузер. Я должен был решить это с помощью этого кода.

 if ('scrollRestoration' in window.history) {
  window.history.scrollRestoration = 'manual'
}

Это позволяет разработчику взять на себя ответственность за изменения прокрутки. Подробнее об этом здесь

8
ответ дан Bikal Basnet 8 February 2010 в 20:11
поделиться

Если у вас есть что-то вроде этого:

html, body { height: 100%; overflow:auto; }

Если определение body и html имеет определение высоты 100%, а также включена прокрутка, window.scrollTo (и все производные механизмы прокрутки) не работают, несмотря на отображаемую полосу прокрутки (которая может использоваться пользователем), когда содержимое превышает этот 100% роста. Это потому, что полоса прокрутки, которую вы видите, - это не окно, а тело.

Решение:

html { height: 100%; overflow:auto; }
body { height: 100%; }
55
ответ дан frevd 8 February 2010 в 20:11
поделиться

У меня была такая же проблема. Окно фокусировки до прокрутки работало на меня.

window.focus();
window.scrollTo(0,800);
1
ответ дан Jeroen Heier 8 February 2010 в 20:11
поделиться

Проверьте, нет ли у вашего тега места, где находится ваш свиток, переполнение CSS [/ - x-y]: скрыто. это исправило ошибку

1
ответ дан marcdahan 8 February 2010 в 20:11
поделиться

Когда window.scrollTo(x,y) не работает на консоли браузера, и дом отображается после прокрутки, вы можете использовать это.

Для прокрутки на 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);"))
0
ответ дан Rajan 8 February 2010 в 20:11
поделиться

У меня была такая же проблема сегодня, а затем я обнаружил, что когда я вынул автоматически сгенерированный блок 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 года назад), но, надеюсь, это поможет кому-то еще столкнуться с той же проблемой.

3
ответ дан Jerry West 8 February 2010 в 20:11
поделиться

Ну, очевидно, он не будет прокручиваться, если ваша страница по крайней мере (viewport.height - 800) высотой. Вы видите полосу прокрутки? В противном случае вы делаете что-то еще не так.

-2
ответ дан Josh Stodola 8 February 2010 в 20:11
поделиться

Во-первых, достаточно ли большая страница для прокрутки (даже если она в фрейме)? Если нет, или вы не уверены, сделайте гигантский div, затем поместите что-нибудь под ним. Попробуйте перейти к этому.

Далее, если вы прокручиваете в iframe, поместите ваш код на ту же страницу, что и источник фрейма. Таким образом, вам не нужно беспокоиться о получении документа или конкретного элемента в другом окне, что может быть сложно. Ах да, ты уверен, что правильно понял эту часть? В этом вам поможет Firebug.

Наконец, установите точку останова (используя Firebug) на строке, которая должна вызывать прокрутку. Это достигло той точки останова? Если нет, ваш код не выполняется, и прокрутка не является вашей проблемой.

(Я ответил на это, поддерживая контекст из вашего предыдущего вопроса .)

РЕДАКТИРОВАТЬ:

Прокрутка выполняется окно за окном. Если вы находитесь в кадре, который не может прокрутить, то ничего не будет прокручиваться. Если вы хотите, чтобы этот элемент в кадре был прокручен, получите смещение этого элемента к его текущему окну и добавьте его к смещению содержащего фрейма. Это должно сработать.

0
ответ дан Community 8 February 2010 в 20:11
поделиться

Я исправил эту проблему с помощью setTimout. Я использовал angularjs, но, возможно, это поможет и ванильным js.

        setTimeout(function () {
            window.scrollTo(0, 300);
        },2);
14
ответ дан Vince Verhoeven 8 February 2010 в 20:11
поделиться

Возьмите этот код: http://www.java2s.com/Code/JavaScriptReference/Javascript-Methods/scrollToExample.htm и сохраните как HTML-файл. Обратите внимание, что он жестко кодирует очень большой div больше, чем область просмотра браузера. Вам, вероятно, нужно добавить контент внизу страницы, чтобы прокрутка работала.

-2
ответ дан Christopher Tokar 8 February 2010 в 20:11
поделиться

Это вчера произошло со мной, потому что я имел overflow: auto на отделении, которое было ребенком к <html> и <body>.

, Таким образом, я узнал, что, чтобы window.scrollTo() работал, Вы должны иметь overflow: auto (или что бы то ни было, overflow-y: scroll) набор на <html> элемент.

я узнал, что, чтобы document.body.scrollTo() работал, Вы должны иметь overflow набор на [1 110].

я узнал, что можно также использовать его на любом другом элементе (если Вы хотите), использование document.querySelector('#some-container').scrollTo().

В моем случае, я хотел window.scrollTo() работать, таким образом, я поместил водосливный CSS на [1 113].

я удивлен никакие другие ответы в здесь разговоре о "точно, который" элемент с возможностью прокрутки. Корневой элемент HTML должен быть с возможностью прокрутки, чтобы window.scrollTo() работал. Все мои дочерние элементы в нисходящем направлении [1 115] установлены на [1 116].

Мой CSS похож на это:

html { position: absolute; left: 0; top: 0; right: 0; bottom: 0; overflow: auto; }
body { width: 100%; height: auto; }
#app { width: 100%; height: auto; }
0
ответ дан agm1984 10 October 2019 в 13:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: