Прокрутіть до початку сторінки за допомогою JavaScript?


1592

Як я прокручую вгору сторінки за допомогою JavaScript? Бажано, навіть якщо смуга прокрутки миттєво стрибає на вершину. Я не шукаю плавного прокручування.


2019, щоб уникнути "Здається, цей сайт використовує ефект позиціонування, пов'язаний з прокруткою. Це може не спрацювати з асинхронним пануванням »використовувати мій сценарій stackoverflow.com/a/57641938/5781320
Константин

Відповіді:


2170

Якщо вам не потрібні зміни для анімації, то вам не потрібно використовувати будь-які спеціальні плагіни - я б просто скористався нативним JavaScript window.scrollДля того, щоб перейти в 0,0, миттєво прокрутіть сторінку вліво вліво .

window.scrollTo(x-coord, y-coord);

Параметри

  • x-координата - піксель вздовж горизонтальної осі.
  • y-координата - піксель уздовж вертикальної осі.

176
Це було моє значення, якщо вам не потрібно анімувати плавне прокручування, то вам не потрібно використовувати jQuery.
daniellmb

22
Смішно, оскільки коментар Джеффа - це чесно людям, які просто хочуть, щоб справи працювали між веб-браузером, 95% часу просто повинні використовувати jQuery. Це виходить від кого - то , хто повинен написати багато чистого JavaScript прямо зараз , тому що ми не можемо дозволити собі накладні бібліотеки сповільнюючи рекламний код :(
Will

11
Ця відповідь не має нічого спільного з питанням. Було б чудово, якби питання було: Який сценарій та методи я повинен використовувати для прокрутки до початку сторінки? Правильна відповідь тут: stackoverflow.com/questions/4147112 / ...
skobaljic

2
Працює для мене в Firefox 40 та Chrome 44 (на адресу коментаря Михайла)
тоні

10
Прокрутіть донизу сторінкиwindow.scrollTo(0, document.body.scrollHeight);
emix

1343

Якщо ви хочете плавно прокручувати, спробуйте щось подібне:

$("a[href='#top']").click(function() {
  $("html, body").animate({ scrollTop: 0 }, "slow");
  return false;
});

Це візьме будь-який <a>тег, чий href="#top"і плавно прокрутить до вершини.


+1. Мені просто було цікаво, як зробити щось подібне, і Google привів мене сюди. Питання, однак, де в документах функція "scrollTop"? Я просто подивився, але не зміг його знайти.
sqram

22
scrollTop не є функцією, це властивість елемента вікна
Jalal El-Shaer

1
Це не працює належним чином при використанні повного зворотного дзвінка аніме, оскільки він запустить його двічі.
Девід Моралес

5
Для сумісності браузера потрібні "html" та "body", тобто Chrome v27 прокручується лише "body", а IE8 - ні. IE8 прокручує лише "html", але Chrome v27 цього не робить.
SushiGuy

1
@jalchr Насправді, window.pageYOffsetбуде властивістю вікна e̶l̶e̶m̶e̶n̶t̶ об’єкта.
Alex W

176

Спробуйте це прокрутити зверху

<script>
 $(document).ready(function(){
    $(window).scrollTop(0);
});
</script>

це те саме: if ('scrollRestoration' в історії) {history.scrollRestoration = 'керівництво'; }
Василь Суріцов

123

Краще рішення з плавною анімацією:

// this changes the scrolling behavior to "smooth"
window.scrollTo({ top: 0, behavior: 'smooth' });

Довідка: https://developer.mozilla.org/en-US/docs/Web/API/Window/scrollTo#Example


Можливо, вам все ж доведеться поліфінувати підтримку ScrollOptions(для певних браузерів): github.com/iamdustan/smoothscroll
jneuendorf

Мені це рішення дуже подобається.
SuperManEver

Чи може хтось перевірити це на Safari або Internet Explorer і побачити, чи працює він добре? Спасибі
Фабіо Магареллі

1
@FabioMagarelli Його добре працює на Safari, не перевіряється на IE. FYI, щоб перевірити його на сафарі, відкрийте будь-яку сторінку, на якій є прокрутка та копіювання, вставте вищевказаний код в Інструменти для розробників -> Консоль, він прокручується до верхньої перевірки (Safari Версія 13.0.5).
Ганеш Галаме

104

Для цього вам не потрібен jQuery. Стандартного тегу HTML буде достатньо ...

<div id="jump_to_me">
    blah blah blah
</div>

<a target="#jump_to_me">Click Here To Destroy The World!</a>

12
+1 Це добре, якщо вам потрібно перейти до конкретного елемента, а не лише до вершини.
Іш

38
Використовуйте "<a href="#"> Вгору </a>", щоб перейти до верхньої частини сторінки.
Bakanekobrain

3
Це, мабуть, найкращий шлях для роботи зі СПА
Філ,

Приємно! Чи є спосіб зробити це плавним прокручуванням?
затримка

65

Усі ці пропозиції чудово підходять для різних ситуацій. Для тих , хто знаходить цю сторінку з допомогою пошуку, можна також дати це спробувати. JQuery, немає плагіна, прокрутіть до елемента.

$('html, body').animate({
    scrollTop: $("#elementID").offset().top
}, 2000);

47

плавна прокрутка, чистий javascript:

(function smoothscroll(){
    var currentScroll = document.documentElement.scrollTop || document.body.scrollTop;
    if (currentScroll > 0) {
         window.requestAnimationFrame(smoothscroll);
         window.scrollTo (0,currentScroll - (currentScroll/5));
    }
})();

31
<script>
$(function(){
   var scroll_pos=(0);          
   $('html, body').animate({scrollTop:(scroll_pos)}, '2000');
});
</script>

Редагувати:

$('html, body').animate({scrollTop:(scroll_pos)}, 2000);

Ще один спосіб прокрутки з верхнім і лівим полем:

window.scrollTo({ top: 100, left: 100, behavior: 'smooth' });

4
Ви впевнені, що тривалість роботи рядка в функції анімації працює?
йогеш

Ви не можете використовувати рядок протягом тривалості animateфункції, замість цього слід використовувати: $('html, body').animate({scrollTop:(scroll_pos)}, 2000);
Kenny Alvizuris

1
Який сенс загортання 0 у дужки? ((0)) буде просто оцінювати до 0.
Джек Віал

Так @Jack, можна.
Kamlesh

29
<script>

  $("a[href='#top']").click(function() {
     $("html, body").animate({ scrollTop: 0 }, "slow");
     return false;
  });
</script>

в html

<a href="#top">go top</a>

28

Дійсно дивно: це питання активне вже п’ять років, і досі немає відповіді на ванільний JavaScript, щоб анімувати прокрутку… Тож ось вам:

var scrollToTop = window.setInterval(function() {
    var pos = window.pageYOffset;
    if ( pos > 0 ) {
        window.scrollTo( 0, pos - 20 ); // how far to scroll on each step
    } else {
        window.clearInterval( scrollToTop );
    }
}, 16); // how fast to scroll (this equals roughly 60 fps)

Якщо вам подобається, ви можете зафіксувати це у функції та викликати це через onclickатрибут. Перевірте цю jsfiddle

Примітка. Це дуже базове рішення і, можливо, не найефективніше. Дуже детальний приклад можна знайти тут: https://github.com/cferdinandi/smooth-scroll


6
Питання, очевидно, запитує рішення jQuery. так не дивно
Буде

2
Найкраще рішення для мене. Ні плагінів, ні громіздкої бібліотеки jquery, просто прямий JavaScript. Kudos
користувач2840467

Людина, я також створив цю ж логіку XD через 5 років, абсолютно таку ж логіку, тільки значення різні, як інтервал часу, і це ціле число, яке ми використовуємо для віднімання, не може повірити XD. TBH, прийшов сюди відповісти, але це вже так схвалило вашу відповідь.
Germa Vinsmoke

27

Якщо ви хочете зробити плавну прокрутку, спробуйте:

$("a").click(function() {
     $("html, body").animate({ scrollTop: 0 }, "slow");
     return false;
});

Ще одне рішення - JavaScript window.scrollДля методу:

 window.scrollTo(x-value, y-value);

Параметри:

  • x-значення - піксель вздовж горизонтальної осі.
  • y-значення - піксель уздовж вертикальної осі.

7
copycat ... дивіться відповіді користувачів ... Це лише компіляція двох найкращих відповідей ....
Лоран Б

це законний спосіб використання stackoverflow - практичніше мати його в одному місці. Джоель Спольський використав повторне використання існуючих відповідей як приклад того, як повинен працювати потік потоку в один момент. Якщо вас цікавить, я можу спробувати знайти пост у блозі
Едгар Х

26

З window.scrollTo(0, 0);дуже швидко,
тому я спробував приклад Марка Урсіно, але в Chrome нічого не відбувається,
і я знайшов це

$('.showPeriodMsgPopup').click(function(){
    //window.scrollTo(0, 0);
    $('html').animate({scrollTop:0}, 'slow');//IE, FF
    $('body').animate({scrollTop:0}, 'slow');//chrome, don't know if Safari works
    $('.popupPeriod').fadeIn(1000, function(){
        setTimeout(function(){$('.popupPeriod').fadeOut(2000);}, 3000);
    });
});

перевірено всі 3 браузери, і він працює,
я використовую програму css blueprint.
Це коли клієнт натискає кнопку "Забронювати зараз" і не вибрано період оренди, повільно рухається до вершини, де є календарі, і відкриває діалогове вікно, яке вказує на 2 поля, після 3сек


Дякуємо, що вказали, що вам потрібно націлити на html та body. Я робив це лише для html і цікавився, чому це не працює в Chrome.
Джаред

Анімація тіла працює в Safari, тому я відповідно оновляю вашу відповідь.
Дейв ДуПлантіс

46
"Перевірено всі 3 браузери "? Midori, LuaKit і Konqueror, правда? : p
Анко

14
Чому б просто не зробити $ ('html', 'body'). Анімацію ({scrollTop: 0}), а не додати два рядки?
Метт Сміт

23

Багато з користувачів рекомендується вибирати як HTML , і тіло теги для крос-браузерної сумісності, наприклад , так:

$('html, body').animate({ scrollTop: 0 }, callback);

Це може привести вас у бік, якщо ви розраховуєте, що зворотний дзвінок працює лише один раз. Фактично він буде працювати двічі, оскільки ви вибрали два елементи.

Якщо це для вас проблема, ви можете зробити щось подібне:

function scrollToTop(callback) {
    if ($('html').scrollTop()) {
        $('html').animate({ scrollTop: 0 }, callback);
        return;
    }

    $('body').animate({ scrollTop: 0 }, callback);
}

Причина цього працює в Chrome $('html').scrollTop()повертає 0, але не в інших браузерах, таких як Firefox.

Якщо ви не хочете чекати, коли анімація завершиться, якщо смуга прокрутки вже вгорі, спробуйте:

function scrollToTop(callback) {
    if ($('html').scrollTop()) {
        $('html').animate({ scrollTop: 0 }, callback);
        return;
    }

    if ($('body').scrollTop()) {
        $('body').animate({ scrollTop: 0 }, callback);
        return;
    }

    callback();
}

19

Старий #topможе зробити трюк

document.location.href = "#top";

Відмінно працює у FF, IE та Chrome


Приємно! Чи є спосіб зробити це плавним прокручуванням?
затримка

вам слід уникати рішень, орієнтованих на навігацію, дивіться коментарі до відповіді Sriramajeyam.
Ендрю Гроте

15

$(".scrolltop").click(function() {
  $("html, body").animate({ scrollTop: 0 }, "slow");
  return false;
});
.section{
 height:400px;
}
.section1{
  background-color: #333;
}
.section2{
  background-color: red;
}
.section3{
  background-color: yellow;
}
.section4{
  background-color: green;
}
.scrolltop{
  position:fixed;
  right:10px;
  bottom:10px;
  color:#fff;
}
<html>
<head>
<title>Scroll top demo</title>
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
</head>
<body>
<div class="content-wrapper">
<div class="section section1"></div>
<div class="section section2"></div>
<div class="section section3"></div>
<div class="section section4"></div>
<a class="scrolltop">Scroll top</a>
</div>

</body>
</html>


3
Хоча цей код може відповісти на питання, надаючи інформацію про те, як і чому він вирішує проблему, поліпшується його довгострокове значення
L_J

Поясніть свою відповідь!
Ullas Hunka

На веб-сторінці будь-який користувач буде натискати на кнопку прокрутки вгорі, потім на сторінці буде прокручуватися верхній верх з анімацією.
arvinda kumar

Чому anime () замість jquery scroll ()?
Акін Хван


14

$(document).scrollTop(0); також працює.


2
Зауважте, що коли ви не використовуєте Firefox, це не працює. Ви отримуєте помилку, коли вказуєте лише один аргумент (Помилка: недостатньо аргументів [nsIDOMWindow.scrollTo]).
Хаскі

14

Рішення без jQuery / чистий JavaScript:

document.body.scrollTop = document.documentElement.scrollTop = 0;


10

Спробуйте цей код:

$('html, body').animate({
    scrollTop: $("div").offset().top
}, time);

div => Елемент Дому, куди потрібно перемістити прокрутку.

time => мілісекунд, визначте швидкість прокрутки.



8

Вам не потрібен JQuery. Просто ви можете зателефонувати за сценарієм

window.location = '#'

при натисканні на кнопку "Перейти вгору"

Приклад демонстрації:

output.jsbin.com/fakumo#

PS: Не використовуйте цей підхід, коли ви використовуєте сучасні бібліотеки, такі як angularjs. Це може порушити URL-адресу хешбангу.


9
На жаль, це не найкраще рішення, оскільки ви фізично змінюєте місце розташування в цьому випадку замість прокрутки сторінки. Це може спричинити проблеми, якщо важливе місце розташування (у випадку використання кутової маршрутизації тощо)
Yaroslav Rogoza

2
@YaroslavRogoza правильний. Хоча це може працювати в простих випадках, я б не рекомендував це рішення. Місце набуває все більшого значення, і односторінкові програми широко використовують хеш для керування навігацією. Ви одразу введете помилку з побічними ефектами, коли додавати навігацію на основі хешу після цього або цього до навігації на основі хешу.
Ендрю Гроте

8

Просто використовуйте цей скрипт для прокрутки до верхнього прямого.

<script>
$(document).ready(function(){
    $("button").click(function(){
        ($('body').scrollTop(0));
    });
});
</script>

8

Чисте рішення JavaScript:

function scrollToTop() {
  window.scrollTo({
    top: 0,
    behavior: 'smooth'
});

Я пишу анімаційне рішення на Codepen

Також ви можете спробувати інше рішення з scroll-behavior: smoothвластивістю CSS .

html {
    scroll-behavior: smooth;
}

@media (prefers-reduced-motion: reduce) {
    html {
        scroll-behavior: auto;
    }
}

7

Якщо ви не хочете плавного прокручування, ви можете обдурити і зупинити анімацію плавної прокрутки, як тільки ви її запустите ... так:

   $(document).ready(function() {
      $("a[href='#top']").click(function() {
          $("html, body").animate({ scrollTop: 0 }, "1");              
          $('html, body').stop(true, true);

          //Anything else you want to do in the same action goes here

          return false;                              
      });
  });

Я не маю уявлення, рекомендується чи дозволено, але це працює :)

Коли ви використовуєте це? Я не впевнений, але, можливо, коли ви хочете скористатися одним клацанням, щоб анімувати одне з Jquery, але зробити інше без анімації? тобто відкрийте панель для входу в адміністратор для слайдів у верхній частині сторінки та миттєво перейдіть до вершини, щоб побачити її.


6

Мотивація

Це просте рішення працює на самоті і реалізує плавну прокрутку до будь-якої позиції.

Це дозволяє уникати використання прив’язних посилань (тих, що мають #), які, на мою думку, є корисними, якщо ви хочете зробити посилання на якийсь розділ, але в деяких ситуаціях не так зручно, особливо при вказівці вгору, що може призвести до двох різних URL-адрес, що вказують на те саме розташування ( http://www.example.org та http://www.example.org/# ).

Рішення

Поставте ідентифікатор тегу, до якого потрібно прокрутити, наприклад, ваш перший розділ , який відповідає на це запитання, але ідентифікатор може бути розміщений скрізь на сторінці.

<body>
  <section id="top">
    <!-- your content -->
  </section>
  <div id="another"><!-- more content --></div>

Тоді як кнопку можна використовувати посилання, просто відредагуйте атрибут onclick таким кодом.

<a onclick="document.getElementById('top').scrollIntoView({ behavior: 'smooth', block: 'start', inline: 'nearest' })">Click me</a>

Де аргументом document.getElementByIdє ідентифікатор тегу, до якого потрібно прокрутити після клацання.


Дякую! відмінне рішення
Уго Стівен Лагуна Руеда

@HugoStivenLagunaRueda, ласкаво просимо, я знайшов це на MDN, тож завдяки Mozilla. Дивовижно, скільки речей вже є, підтримуваних на самому світі. Я люблю ванільний JS.
Джанлука Касаті

5

Ви можете просто використовувати ціль зі свого посилання, наприклад, #someid, де #someid - ідентифікатор div.

Або ви можете використовувати будь-яку кількість плагінів прокрутки, які роблять це більш елегантним.

http://plugins.jquery.com/project/ScrollTo - приклад.


4

Ви можете спробувати використовувати JS, як у цій скрипці http://jsfiddle.net/5bNmH/1/

Додайте кнопку "Перейти вгору" у нижньому колонтитулі сторінки:

<footer>
    <hr />
    <p>Just some basic footer text.</p>
    <!-- Go to top Button -->
    <a href="#" class="go-top">Go Top</a>
</footer>

4
function scrolltop() {

    var offset = 220;
    var duration = 500;

    jQuery(window).scroll(function() {
        if (jQuery(this).scrollTop() > offset) {
            jQuery('#back-to-top').fadeIn(duration);
        } else {
            jQuery('#back-to-top').fadeOut(duration);
        }
    });

    jQuery('#back-to-top').click(function(event) {
        event.preventDefault();
        jQuery('html, body').animate({scrollTop: 0}, duration);
        return false;
    });
}

4

Жодна з наведених вище відповідей не працюватиме в SharePoint 2016.

Це потрібно зробити так: /sharepoint/195870/

var w = document.getElementById("s4-workspace");
w.scrollTop = 0;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.