Есть ли способ управления прокруткой браузера с помощью JavaScript / jQuery?
Когда я прокручиваю свою страницу на полпути вниз, а затем запускаю перезагрузку, я хочу, чтобы страница поднималась вверх, но вместо этого она пытается найти последнюю позицию прокрутки. Итак, я сделал это:
$('document').ready(function() {
$(window).scrollTop(0);
});
Но не повезло.
РЕДАКТИРОВАТЬ :
Так что оба ваших ответа сработали, когда я позвонил им после загрузки страницы. Спасибо. Тем не менее, если я просто обновлю страницу, похоже, что браузер вычисляет и прокручивает до своей прежней позиции прокрутки ПОСЛЕ .ready
события (я тоже проверял функцию body onload ()).
Итак, продолжение: есть ли способ ПРЕДОТВРАТИТЬ браузер, прокручивающий его в предыдущее положение, или повторно прокрутить вверх, ПОСЛЕ того, как он делает свое дело?
источник
Ответы:
Вау, я на 9 лет опоздал на этот вопрос. Ну вот:
Добавьте этот код в свою загрузку.
history.scrollRestoration Поддержка браузера:
Chrome: поддерживается (с 46)
Firefox: поддерживается (с 46)
IE / Edge: не поддерживается (пока ..)
Опера: поддерживается (с 33)
Safari: поддерживается
Для IE / Edge, если вы хотите повторно прокрутить вверх, ПОСЛЕ того, как он автоматически прокрутится вниз, тогда это работает для меня:
источник
Кросс-браузерное решение на чистом JavaScript:
источник
$(window).one("scroll",function() { /* the code from my answer here */ });
Вы почти получили это - вам нужно установить
scrollTop
наbody
, а неwindow
:РЕДАКТИРОВАТЬ:
Может быть, вы можете добавить пустой якорь в верхней части страницы:
источник
'html','body'
как современные браузеры будут прокручивать на основе body, а IE8 и ниже будут прокручивать только с «html», «body»Следующее решение jquery работает для меня:
источник
Вот чистая JavaScript-версия с прокруткой для no-jQuery'ers: D
А потом:
источник
requestAnimationStep
вместоsetTimeout
. Также это не отвечает на вопрос ОП.ОБНОВИТЬ
Перейти к началу страницы с эффектом прокрутки теперь немного проще в javascript с помощью:
https://developer.mozilla.org/en-US/docs/Web/API/Window/scroll
ВНИМАНИЕ
Мы использовали это в наших более свежих проектах, но я только что проверил документацию Mozilla прямо сейчас, обновляя свой ответ, и я считаю, что он был обновлен. Прямо сейчас метод
window.scroll(x-coord, y-coord)
не упоминает и не показывает примеры, в которых используетсяobject
параметр, для которого можно установитьbehavior
значениеsmooth
. Я только что попробовал код, и он все еще работает в Chrome и Firefox, а параметр объекта все еще в спецификации .Так что используйте это с осторожностью, или вы можете использовать этот Polyfill . Помимо прокрутки в верхней части, это polyfill также обрабатывает другие методы:
window.scrollBy
,element.scrollIntoView
и т.д.СТАРЫЙ ОТВЕТ
Это наша ванильная
javascript
реализация. Он имеет простой эффект смягчения, так что пользователь не будет шокирован после нажатия наверх .Он очень маленький и становится еще меньше при уменьшении. Разработчики, ищущие альтернативу методу jquery, но желающие получить те же результаты, могут попробовать это.
JS
HTML
Ура!
источник
Это работает для меня:
Использует короткий
setTimeout
внутри,onload
чтобы дать браузеру возможность сделать прокрутку.источник
Вы можете использовать с JQuery
источник
Используйте следующую функцию
Здесь требуется xpos. Координата для прокрутки по оси x (по горизонтали) в пикселях
Ипос также требуется. Координата для прокрутки по оси Y (по вертикали) в пикселях
источник
Использовать это
источник
Следующий код работает в Firefox, Chrome и Safari , но я не смог проверить это в Internet Explorer. Может кто-нибудь проверить это, а затем отредактировать мой ответ или прокомментировать?
источник
Мое чистое (анимированное) решение Javascript:
Объяснение:
window.scrollY
это переменная, поддерживаемая браузером количества пикселей сверху, по которому окно прокручивалось.window.scrollTo(x,y)
это функция, которая прокручивает окно на определенное количество пикселей по оси x и по оси y.Таким образом,
window.scrollTo(0,window.scrollY-20)
страница перемещается на 20 пикселей вверх.setTimeout
Снова вызывает функцию в течение 10 миллисекунд , так что мы можем переместить его еще 20 пикселей (анимированные), иif
проверяет заявление , если мы по- прежнему необходимы свитке.источник
Почему бы вам просто не использовать какой-либо элемент ссылки в самом начале вашего HTML-файла, например
а затем, когда страница загружается, просто сделайте
Если браузер прокручивает после запуска этой функции, вы просто делаете
источник
Кросс-браузерная прокрутка вверх:
Кросс-браузерная прокрутка до элемента с id = div_id:
источник
Чтобы ответить на ваш отредактированный вопрос, вы можете зарегистрировать
onscroll
обработчик следующим образом:Это сделает так, что первая попытка прокрутки (которая, скорее всего, сделана браузером автоматически) будет эффективно отменена.
источник
Если вы находитесь в режиме причуд (спасибо @Niet the Dark Absol):
Если вы находитесь в строгом режиме:
Нет необходимости в jQuery здесь.
источник
Это работает:
источник
В моем случае тело не сработало:
Но HTML работал:
источник
'html','body'
современных браузера FF, Chrome будет прокручивать на основе тела, но IE8 и ниже будут прокручиваться только с'html','body'
Сочетание этих двух помогло мне. Ни один из других ответов не помог мне, так как у меня был sidenav, который не прокручивался.
источник
источник
без анимации, просто
scroll(0, 0)
(ваниль JS)источник
Если кто-то использует угловой и материальный дизайн с sidenav. Это отправит вас в верхнюю часть страницы:
источник
Seeint хеш должен сделать работу. Если у вас есть заголовок, вы можете использовать
в противном случае, один # будет работать
И как только оно будет записано в URL, оно останется, если вы обновитесь.
На самом деле, вам не нужен JavaScript для этого, если вы хотите сделать это для события onclick, вам просто нужно поместить ссылку вокруг элемента и указать его # как href.
источник
Сначала добавьте пустой тег привязки к месту, куда вы хотите пойти
Теперь добавьте функцию в разделе заголовка
наконец добавьте событие загрузки в тег body
источник
Универсальная версия, которая работает для любых значений X и Y и такая же, как window.scrollTo api, только с добавлением scrollDuration.
* Универсальная версия, соответствующая интерфейсу window.scrollTo для браузера **
источник
Я помню, как это было опубликовано где-то еще (я не мог найти где), но это работает очень хорошо:
Это странно, но то, как это работает, основано на том, как работает очередь стека JavaScript. Полное объяснение находится здесь, в разделе «Нулевые задержки».
Основная идея заключается в том, что время для
setTimeout
фактически не указывает установленное количество времени, которое оно будет ждать, но минимальное количество времени, которое оно будет ждать. Поэтому, когда вы говорите ему подождать 0 мс, браузер запускает все другие процессы, находящиеся в очереди (например, прокручивает окно до того места, где вы были в последний раз), а затем выполняет обратный вызов.источник
источник