- JavaScript метод scrollTo ничего не делает?
- 10 ответов
- Не работает скрипт прокрутки страницы
- Почему не работает функция scrollTo?
- Размеры и прокрутка окна
- Ширина/высота окна
- Ширина/высота документа
- Получение текущей прокрутки
- Прокрутка: scrollTo, scrollBy, scrollIntoView
- scrollIntoView
- Запретить прокрутку
- Итого
- Размеры и прокрутка страницы
- Ширина/высота видимой части окна
- Ширина/высота страницы с учётом прокрутки
- Получение текущей прокрутки
- Изменение прокрутки: scrollTo, scrollBy, scrollIntoView
- scrollIntoView
- Запрет прокрутки
- Итого
- Задачи
- Полифилл для pageYOffset в IE8
JavaScript метод scrollTo ничего не делает?
Итак, я desperatley пытается получить некоторые функции прокрутки для работы на странице. После того, как я не повезло, я решил просто прикрепить window.scrollTo(0, 800); на моей странице, чтобы увидеть, могу ли я пропустить прокрутку. Ничего не происходит. У меня есть аккордеон, который расширяется, а затем я хочу прокрутить его до определенного элемента. Но на данный момент я был бы рад просто увидеть прокрутку. Кто-нибудь сталкивается с этим?
10 ответов
Мне удалось решить эту проблему, используя метод jQuery animate(). Вот пример реализации, с которым я пошел:
Селектор получает div с . Затем я применяю метод animate на нем с scrollTop в качестве опции. Второй параметр — это время в миллисекундах для продолжительности анимации. Надеюсь, это поможет кому-то другому.
Если у вас есть что-то вроде этого:
Если оба тела и html имеют определение высоты 100%, а также включена прокрутка, window.scrollTo(и все производные механизмы прокрутки) не работают, несмотря на отображение полосы прокрутки (которая может использоваться пользователем), когда содержание превышает 100% роста. Это потому, что полоса прокрутки вы видите не в окне, а в теле.
Я исправил эту проблему с помощью setTimout. Я использовал angularjs, но, возможно, это может помочь и в vanilla js.
Иногда это не просто проблема css, для меня это был браузер. Я должен был решить это с помощью этого кода.
Это позволяет разработчику взять на себя ответственность за изменения прокрутки. Подробнее об этом здесь
У меня была такая же проблема сегодня, а затем я обнаружил, что когда я вынул автоматически созданный блок doctype:
Window.scrollTo(0,800) начал работать вместе с функцией ExtJs scrollTo(), которую я изначально пытался использовать. Я вернул блок и перестала работать. Я не знаю, было ли это то, с чем вы сталкивались (2 года назад), но, надеюсь, это помогает кому-то другому столкнуться с одной и той же проблемой.
проверьте, не помечен ли ваш тег, где вы подключены, прокрутка CSS переполнения [/- x-y]: скрыто. он исправил ошибку
Когда window.scrollTo(x,y) не работает на консоли браузера, и dom визуализируется после прокрутки, вы можете использовать это.
Для прокрутки на Splash или любом другом сервисе рендеринга JavaScript выполните ниже js:
В Splash вы можете сделать что-то похожее на это:
Во-первых, ваша страница достаточно велика для прокрутки (даже если она в iframe)? Если нет, или вы не уверены, сделайте гигантский div, а затем положите что-то ниже. Попробуйте прокрутить к нему.
Затем, если ваша прокрутка в iframe, поместите свой код на ту же страницу, что и источник кадра. Таким образом, вам не нужно беспокоиться о том, чтобы получить документ или конкретный элемент в другом окне, что может быть сложно. О да, ты уверен, что правильно понял эту часть? Переход с помощью Firebug может помочь вам в этом.
Наконец, поставьте точку останова (используя Firebug) в строке, которая должна вызвать прокрутку. Он попал в точку останова? Если нет, ваш код не выполняется, и прокрутка не является вашей проблемой.
(Я ответил на это, поддерживая контекст из вашего предыдущего вопроса.)
Прокрутка выполняется окном по окну. Если вы находитесь в кадре, который не может прокручиваться, ничто не будет прокручиваться. Если вы хотите, чтобы этот элемент в кадре был прокручен, получите смещение этого элемента в его текущее окно и добавьте его к смещению содержащего фрейма. Это должно сделать трюк.
Источник
Не работает скрипт прокрутки страницы
Добрый день. Может, пишу не туда, но возникла проблема со скриптом, который при нажатии на кнопку должен плавно прокручивать страницу вверх. После тестирования alertами создалось впечатление, будто браузер вообще не видит скрипт. В чём может быть проблема? Я новичок в JS, так что возможны самые глупые ошибки.
Добавлено через 1 час 4 минуты
Поправил несколько синтаксических ошибок в скрипте.
Теперь всё работает, да только вот clearInterval не срабатывает, хотя в else заходит.
Добавлено через 9 минут
Дело было в видимости переменных.
Так всё работает:
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Скрипт для прокрутки страницы вверх.
Очень, ну просто очень понравился скрипт прокрутки страницы вверх на вот этом сайте: <ссылка.
Скрипт плавной прокрутки сайта
Как можно проще всего реализовать плавную прокрутку к следующей секции как на этом сайте при.
Старт анимации по мере прокрутки страницы
Если в классе объекта прописать следующие свойства: animation-delay: 0.1s; animation-name.
Изменение свойств блока в зависимости от прокрутки страницы
Подсобите пожалуйста. Имеется fixed блок закрепленный в самом верху с прозрачным фоном, нужно.
Скрипт по секционной прокрутки страницы
Для реализации по секционной( по тегам section) прокрутки лендинга мной написан скрипт, но условие.
Скрипт прокрутки
Срочно нужен скрипт, аналогичный фреймам, чтобы прокручивать текст. Поясню. Страница разделена.
Скрипт полосы прокрутки
Подскажите пожалуйста скрипт для изменения полосы прокрутки. Хотелось сделать в меню прокрутку.
Источник
Почему не работает функция scrollTo?
Ребята, чисто для интереса балуюсь разными фичами, и столкнулся с тем, что что на простой HTML странице не работает scrollTo(x, y). У меня не задана высота страницы height по умолчанию auto. Но, если я в css файле прописываю к body, к примеру, height: 1000px;, то всё отлично работает, есть прокрутка страницы вниз на заданный интервал. Вопрос: Разве для scrollTo() нужно указывать высоту body, а без этого она не работает?
- Вопрос задан более трёх лет назад
- 748 просмотров
Разве для scrollTo() нужно указывать высоту body, а без этого она не работает?
Если у Вас нет полосы прокрутки, то прокрутка «сработает», но визуально от этого ничего не изменится.
По моему, ещё прокрутку желательно делать и для BODY и для HTML одновременно, т.к. в каких-то баузерах, с этим были проблемы. Возможно информация уже не актуальна.
есть прокрутка страницы вниз на заданный интервал.
Romantic: вот и ответ на Ваш вопрос (который кстати я уже выше писал). Если нет полосы прокрутки — то метод ScrollTo() — не растянет элемент HTML/BODY на 100% высоты и не добавит к этому значению ещё +50px (50px — для примера), что бы страница стала скроллится на 50px вниз.
Или, давайте попробую объяснить по другому. Когда Вы колёсиком мыши пытаетесь проскроллить страницу, у которой нет полосы прокрутки — происходит «ничего». ScrollTo() в данном случае работает аналогично колёсику мыши. То есть, если страница не скроллится, это не значит, что колёсико мыши не работает, это значит что скроллить её просто некуда 🙂
Аналогичная ситуация будет при использовании «якорей», при попытке перейти к якорю в конце страницы, страница проскрллится до конца, но если контент после якоря занимает высоту меньше высоты экрана — то будет просто скролл страницы в конец, и якорь будет не в самом верху страницы.
Источник
Размеры и прокрутка окна
Как узнать ширину и высоту окна браузера? Как получить полную ширину и высоту документа, включая прокрученную часть? Как прокрутить страницу с помощью JavaScript?
Для большинства таких запросов мы можем использовать корневой элемент документа document.documentElement , который соответствует тегу . Однако есть дополнительные методы и особенности, которые необходимо учитывать.
Ширина/высота окна
Чтобы получить ширину/высоту окна, можно взять свойства clientWidth/clientHeight из document.documentElement :
Например, эта кнопка показывает высоту вашего окна:
Браузеры также поддерживают свойства window.innerWidth/innerHeight . Вроде бы, похоже на то, что нам нужно. Почему же не использовать их?
Если есть полоса прокрутки, и она занимает какое-то место, то свойства clientWidth/clientHeight указывают на ширину/высоту документа без неё (за её вычетом). Иными словами, они возвращают высоту/ширину видимой части документа, доступной для содержимого.
А window.innerWidth/innerHeight включают в себя полосу прокрутки.
Если полоса прокрутки занимает некоторое место, то эти две строки выведут разные значения:
В большинстве случаев нам нужна доступная ширина окна: для рисования или позиционирования. Полоса прокрутки «отъедает» её часть. Поэтому следует использовать documentElement.clientHeight/Width .
Обратите внимание, что геометрические свойства верхнего уровня могут работать немного иначе, если в HTML нет . Возможны странности.
В современном HTML мы всегда должны указывать DOCTYPE .
Ширина/высота документа
Теоретически, т.к. корневым элементом документа является documentElement , и он включает в себя всё содержимое, мы можем получить полный размер документа как documentElement.scrollWidth/scrollHeight .
Но именно на этом элементе, для страницы в целом, эти свойства работают не так, как предполагается. В Chrome/Safari/Opera, если нет прокрутки, то documentElement.scrollHeight может быть даже меньше, чем documentElement.clientHeight ! С точки зрения элемента это невозможная ситуация.
Чтобы надёжно получить полную высоту документа, нам следует взять максимальное из этих свойств:
Почему? Лучше не спрашивайте. Эти несоответствия идут с древних времён. Глубокой логики здесь нет.
Получение текущей прокрутки
Обычные элементы хранят текущее состояние прокрутки в elem.scrollLeft/scrollTop .
Что же со страницей? В большинстве браузеров мы можем обратиться к documentElement.scrollLeft/Top , за исключением основанных на старом WebKit (Safari), где есть ошибка (5991), и там нужно использовать document.body вместо document.documentElement .
К счастью, нам совсем не обязательно запоминать эти особенности, потому что текущую прокрутку можно прочитать из свойств window.pageXOffset/pageYOffset :
Эти свойства доступны только для чтения.
Прокрутка: scrollTo, scrollBy, scrollIntoView
Для прокрутки страницы из JavaScript её DOM должен быть полностью построен.
Например, если мы попытаемся прокрутить страницу из скрипта в , это не сработает.
Обычные элементы можно прокручивать, изменяя scrollTop/scrollLeft .
Мы можем сделать то же самое для страницы в целом, используя document.documentElement.scrollTop/Left (кроме основанных на старом WebKit (Safari), где, как сказано выше, document.body.scrollTop/Left ).
Есть и другие способы, в которых подобных несовместимостей нет: специальные методы window.scrollBy(x,y) и window.scrollTo(pageX,pageY) .
Метод scrollBy(x,y) прокручивает страницу относительно её текущего положения. Например, scrollBy(0,10) прокручивает страницу на 10px вниз.
Кнопка ниже демонстрирует это:
Метод scrollTo(pageX,pageY) прокручивает страницу на абсолютные координаты (pageX,pageY) . То есть, чтобы левый-верхний угол видимой части страницы имел данные координаты относительно левого верхнего угла документа. Это всё равно, что поставить scrollLeft/scrollTop . Для прокрутки в самое начало мы можем использовать scrollTo(0,0) .
Эти методы одинаково работают для всех браузеров.
scrollIntoView
Для полноты картины давайте рассмотрим ещё один метод: elem.scrollIntoView(top).
Вызов elem.scrollIntoView(top) прокручивает страницу, чтобы elem оказался вверху. У него есть один аргумент:
- если top=true (по умолчанию), то страница будет прокручена, чтобы elem появился в верхней части окна. Верхний край элемента совмещён с верхней частью окна.
- если top=false , то страница будет прокручена, чтобы elem появился внизу. Нижний край элемента будет совмещён с нижним краем окна.
Кнопка ниже прокрутит страницу так, что она сама окажется вверху:
А следующая кнопка прокрутит страницу так, что она сама окажется внизу
Запретить прокрутку
Иногда нам нужно сделать документ «непрокручиваемым». Например, при показе большого диалогового окна над документом – чтобы посетитель мог прокручивать это окно, но не документ.
Чтобы запретить прокрутку страницы, достаточно установить document.body.style.overflow = «hidden» .
Первая кнопка останавливает прокрутку, вторая возобновляет её.
Аналогичным образом мы можем «заморозить» прокрутку для других элементов, а не только для document.body .
Недостатком этого способа является то, что сама полоса прокрутки исчезает. Если она занимала некоторую ширину, то теперь эта ширина освободится, и содержимое страницы расширится, текст «прыгнет», заняв освободившееся место.
Это выглядит немного странно, но это можно обойти, если сравнить clientWidth до и после остановки, и если clientWidth увеличится (значит полоса прокрутки исчезла), то добавить padding в document.body вместо полосы прокрутки, чтобы оставить ширину содержимого прежней.
Итого
Ширина/высота видимой части документа (ширина/высота области содержимого): document.documentElement.clientWidth/Height
Ширина/высота всего документа с прокрученной частью:
Источник
Размеры и прокрутка страницы
Материал на этой странице устарел, поэтому скрыт из оглавления сайта.
Более новая информация по этой теме находится на странице https://learn.javascript.ru/size-and-scroll-window.
Как найти ширину окна браузера? Как узнать всю высоту страницы, с учётом прокрутки? Как прокрутить её из JavaScript?
С точки зрения HTML, документ – это document.documentElement . У этого элемента, соответствующего тегу , есть все стандартные свойства и метрики и, в теории, они и должны нам помочь. Однако, на практике есть ряд нюансов, именно их мы рассмотрим в этой главе.
Ширина/высота видимой части окна
Свойства clientWidth/Height для элемента document.documentElement – это как раз ширина/высота видимой области окна.
Например, кнопка ниже выведет размер такой области для этой страницы:
Все браузеры, кроме IE8-, также поддерживают свойства window.innerWidth/innerHeight . Они хранят текущий размер окна браузера.
В чём отличие? Оно небольшое, но чрезвычайно важное.
Свойства clientWidth/Height , если есть полоса прокрутки, возвращают именно ширину/высоту внутри неё, доступную для документа, а window.innerWidth/Height – игнорируют её наличие.
Если справа часть страницы занимает полоса прокрутки, то эти строки выведут разное:
Обычно нам нужна именно доступная ширина окна, например, чтобы нарисовать что-либо, то есть за вычетом полосы прокрутки. Поэтому используем documentElement.clientWidth .
Ширина/высота страницы с учётом прокрутки
Теоретически, видимая часть страницы – это documentElement.clientWidth/Height , а полный размер с учётом прокрутки – по аналогии, documentElement.scrollWidth/scrollHeight .
Это верно для обычных элементов.
А вот для страницы с этими свойствами возникает проблема, когда прокрутка то есть, то нет. В этом случае они работают некорректно. В браузерах Chrome/Safari и Opera при отсутствии прокрутки значение documentElement.scrollHeight в этом случае может быть даже меньше, чем documentElement.clientHeight , что, конечно же, выглядит как совершеннейшая чепуха и нонсенс.
Эта проблема возникает именно для documentElement , то есть для всей страницы.
Надёжно определить размер страницы с учётом прокрутки можно, взяв максимум из нескольких свойств:
Почему так? Лучше и не спрашивайте, это одно из редких мест, где просто ошибки в браузерах. Глубокой логики здесь нет.
Получение текущей прокрутки
У обычного элемента текущую прокрутку можно получить в scrollLeft/scrollTop .
Что же со страницей?
Большинство браузеров корректно обработает запрос к documentElement.scrollLeft/Top , однако Safari/Chrome/Opera есть ошибки (к примеру 157855, 106133), из-за которых следует использовать document.body .
Чтобы вообще обойти проблему, можно использовать специальные свойства window.pageXOffset/pageYOffset :
- Не поддерживаются IE8-
- Их можно только читать, а менять нельзя.
Если IE8- не волнует, то просто используем эти свойства.
Кросс-браузерный вариант с учётом IE8 предусматривает откат на documentElement :
Изменение прокрутки: scrollTo, scrollBy, scrollIntoView
Чтобы прокрутить страницу при помощи JavaScript, её DOM должен быть полностью загружен.
На обычных элементах свойства scrollTop/scrollLeft можно изменять, и при этом элемент будет прокручиваться.
Никто не мешает точно так же поступать и со страницей. Во всех браузерах, кроме Chrome/Safari/Opera можно осуществить прокрутку установкой document.documentElement.scrollTop , а в указанных – использовать для этого document.body.scrollTop . И будет работать. Можно попробовать прокручивать и так и эдак и проверять, подействовала ли прокрутка, будет кросс-браузерно.
Но есть и другое, простое и универсальное решение – специальные методы прокрутки страницы window.scrollBy(x,y) и window.scrollTo(pageX,pageY).
Метод scrollBy(x,y) прокручивает страницу относительно текущих координат.
Например, кнопка ниже прокрутит страницу на 10px вниз:
Метод scrollTo(pageX,pageY) прокручивает страницу к указанным координатам относительно документа.
Он эквивалентен установке свойств scrollLeft/scrollTop .
Чтобы прокрутить в начало документа, достаточно указать координаты (0,0) .
scrollIntoView
Для полноты картины рассмотрим также метод elem.scrollIntoView(top).
Метод elem.scrollIntoView(top) вызывается на элементе и прокручивает страницу так, чтобы элемент оказался вверху, если параметр top равен true , и внизу, если top равен false . Причём, если параметр top не указан, то он считается равным true .
Кнопка ниже прокрутит страницу так, чтобы кнопка оказалась вверху:
А следующая кнопка прокрутит страницу так, чтобы кнопка оказалась внизу:
Запрет прокрутки
Иногда бывает нужно временно сделать документ «непрокручиваемым». Например, при показе большого диалогового окна над документом – чтобы посетитель мог прокручивать это окно, но не документ.
Чтобы запретить прокрутку страницы, достаточно поставить document.body.style.overflow = «hidden» .
При этом страница замрёт в текущем положении.
При нажатии на верхнюю кнопку страница замрёт на текущем положении прокрутки. После нажатия на нижнюю – прокрутка возобновится.
Вместо document.body может быть любой элемент, прокрутку которого необходимо запретить.
Недостатком этого способа является то, что сама полоса прокрутки исчезает. Если она занимала некоторую ширину, то теперь эта ширина освободится, и содержимое страницы расширится, текст «прыгнет», заняв освободившееся место.
Это может быть не очень красиво, но легко обходится, если вычислить размер прокрутки и добавить такой же по размеру padding .
Итого
Для получения размеров видимой части окна: document.documentElement.clientWidth/Height
Для получения размеров страницы с учётом прокрутки:
Прокрутка окна:
Прокрутку окна можно получить как window.pageYOffset (для горизонтальной – window.pageXOffset ) везде, кроме IE8-.
На всякий случай – вот самый кросс-браузерный способ, учитывающий IE7- в том числе:
Установить прокрутку можно при помощи специальных методов:
- window.scrollTo(pageX,pageY) – абсолютные координаты,
- window.scrollBy(x,y) – прокрутить относительно текущего места.
- elem.scrollIntoView(top) – прокрутить, чтобы элемент elem стал виден.
Задачи
Полифилл для pageYOffset в IE8
Обычно в IE8 не поддерживается свойство pageYOffset . Напишите полифилл для него.
При подключённом полифилле такой код должен работать в IE8:
В стандартном режиме IE8 можно получить текущую прокрутку так:
Самым простым, но неверным было бы такое решение:
Источник