Прокрутіть до початку сторінки за допомогою 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.