Прокрутите страницу вверх, используя JavaScript / jQuery?

1288

У меня есть <button> на странице, когда эта кнопка нажата, скрытый <div> отображается с помощью jQuery.

Как перейти к началу страницы с помощью команды JavaScript/jQuery в этой функции? Желательно, даже если полоса прокрутки мгновенно переходит в верхнюю часть. Я не ищу гладкую прокрутку.

Теги:
scroll

38 ответов

1766
Лучший ответ

Если вам не нужно изменение анимации, вам не нужно использовать какие-либо специальные плагины - я бы просто использовал собственный JavaScript window.scrollTo method - проходящий через 0,0 прокручивает страницу до вверху слева.

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

Параметры

  • x-coord - это пиксель вдоль горизонтальной оси.
  • y-coord - пиксель вдоль вертикальной оси.
  • 161
    Это была моя точка зрения, если вам не нужно анимировать плавную прокрутку, вам не нужно использовать jQuery.
  • 21
    Забавно, но комментарии Джеффа, честно говоря, предназначены для людей, которые просто хотят, чтобы все работало независимо от браузера. 95% времени следует просто использовать jQuery. Это исходит от того, кому сейчас нужно написать много чистого JavaScript, потому что мы не можем позволить себе затратить лишнюю библиотеку, замедляющую рекламный код :(
Показать ещё 5 комментариев
1230

Если вам нужна гладкая прокрутка, попробуйте что-то вроде этого:

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

Это займет любой тег <a>, чей href="#top" и сделает его гладким, прокрутите вверх.

  • 0
    +1. Мне было просто интересно, как сделать что-то подобное, и Google привел меня сюда. ВОПРОС, однако, где находится функция "scrollTop" в документации? Я просто посмотрел, но не смог его найти.
  • 22
    scrollTop это не функция, это свойство элемента окна
Показать ещё 8 комментариев
143

Попробуйте прокрутить вверх

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

Для этого вам не нужен jQuery. Стандартный HTML-тег будет достаточным...

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

<a target="#jump_to_me">Click Here To Destroy The World!</a>
  • 11
    +1 Это хорошо, если вам нужно перейти к конкретному элементу, а не только к вершине.
  • 36
    Используйте "<a href="#"> Top </a>", чтобы перейти к началу страницы.
Показать ещё 2 комментария
52

Все эти предложения отлично подходят для различных ситуаций. Для тех, кто находит эту страницу при поиске, можно также дать эту попытку. JQuery, нет подключаемого модуля, прокрутите до элемента.

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

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

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

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

в html

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

Если вы хотите сделать гладкую прокрутку, попробуйте следующее:

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

Другим решением является метод JavaScript window.scrollTo:

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

Параметры:

  • x-значение - это пиксель вдоль горизонтальной оси.
  • Значение y - это пиксель вдоль вертикальной оси.
  • 4
    copycat ... посмотреть ответы пользователей ... Это всего лишь подборка 2 лучших ответов ....
  • 0
    это законный способ использовать stackoverflow - более практично иметь его в одном месте. Джоэл Спольски использовал повторное использование существующих ответов в качестве примера того, как stackoverflow должен работать в одной точке. Если вы заинтересованы, я могу попытаться найти сообщение в блоге
24

С window.scrollTo(0, 0); работает очень быстро
поэтому я попробовал пример Mark Ursino, но в 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
это когда клиент нажимает кнопку "Забронировать сейчас" и не имеет выбранного периода аренды, медленно перемещается вверху, где находятся календари, и открывает диалоговое окно div, указывающее на 2 поля, после 3 секунд он исчезает

  • 0
    Спасибо за указание на то, что вам нужно настроить таргетинг как на html, так и на body. Я делал это только для html и удивлялся, почему это не работает в Chrome.
  • 0
    Анимация тела работает в Safari, поэтому я обновляю ваш ответ соответственно.
Показать ещё 2 комментария
22

A lot пользователи рекомендуют выбрав теги html и body для совместимости с несколькими браузерами, например:

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

Это может вас пошевелить, хотя если вы рассчитываете, что ваш 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();
}
22

Действительно странный: этот вопрос активен уже пять лет, и все еще нет ответа на ванильный 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. почет
16

Старый #top может сделать трюк

document.location.href = "#top";

Работает отлично в FF, IE и Chrome

  • 0
    Ницца! Есть ли способ сделать это плавной прокруткой?
  • 0
    вам следует избегать решений, основанных на навигации, см. комментарии к ответу Шриримаджейама.
14
<script>
$(function(){
   var scroll_pos=(0);          
   $('html, body').animate({scrollTop:(scroll_pos)}, '2000');
});
</script>

Редактировать:

$('html, body').animate({scrollTop:(scroll_pos)}, 2000);
  • 4
    Вы уверены, что длительность работы строки в функции анимации работает?
  • 0
    Вы не можете использовать строку для длительности в функции animate , вместо этого вы должны использовать: $('html, body').animate({scrollTop:(scroll_pos)}, 2000);
13

Лучшее решение с плавной анимацией:

// 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

  • 0
    Очень чисто и просто, спасибо!
  • 0
    Возможно, вам все еще потребуется поддержка полизаполнения для ScrollOptions (для определенных браузеров): github.com/iamdustan/smoothscroll
Показать ещё 1 комментарий
13

$(document).scrollTop(0); также работает.

  • 2
    Обратите внимание, что если вы не используете Firefox, это не сработает. Вы получаете ошибку, когда задаете только один аргумент (Ошибка: недостаточно аргументов [nsIDOMWindow.scrollTo]).
13

Попробуйте это

<script>
    $(window).scrollTop(100);
</script>
10

Не-jQuery-решение/чистый JavaScript:

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

$(".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>
  • 2
    Хотя этот код может ответить на вопрос, предоставление информации о том, как и почему он решает проблему, повышает ее долгосрочную ценность
  • 0
    Поясните свой ответ!
Показать ещё 1 комментарий
9

Это будет работать:

window.scrollTo(0, 0);

9

Попробуйте этот код:

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

div = > Элемент Dom, в который вы хотите переместить прокрутку.

time = > миллисекунды, определите скорость прокрутки.

7

Просто используйте этот script для прямой прокрутки вверх.

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

Почему вы не используете встроенную функцию JQuery scrollTop:

$('html, body').scrollTop(0);//For scrolling to top

$("body").scrollTop($("body")[0].scrollHeight);//For scrolling to bottom

Короче и просто!

  • 0
    Вам просто не хватает ссылки на документ
6

Вам не нужен JQuery. Просто вы можете вызвать script

window.location = '#'

при нажатии кнопки "Вверх"

Пример демонстрации:

output.jsbin.com/fakumo#

PS: Не используйте этот подход, когда вы используете современные библиотеки, такие как angularjs. Это может привести к поломке URL-адреса hashbang.

  • 0
    это работает во всех основных браузерах?
  • 8
    К сожалению, это не лучшее решение, поскольку в этом случае вы физически меняете местоположение, а не прокручиваете страницу. Это может вызвать проблемы, если местоположение важно (в случае использования угловой маршрутизации или около того)
Показать ещё 1 комментарий
5

мотивация

Это простое решение работает изначально и обеспечивает плавный переход к любой позиции.

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

  • 0
    Спасибо вам! отличное решение
  • 0
    @HugoStivenLagunaRueda, пожалуйста, я нашел это на MDN, так что спасибо Mozilla. Удивительно, сколько вещей уже есть, поддерживается изначально. Я люблю ваниль JS.
5

Если вы не хотите гладкой прокрутки, вы можете обманывать и останавливать анимацию плавной прокрутки в значительной степени, как только начинаете ее... например:

   $(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, но сделать другую без анимации? т.е. открыть панель входа администратора в верхней части страницы и мгновенно перейти к ней, чтобы увидеть ее.

5

Вы можете просто использовать цель из вашей ссылки, например, #someid, где #someid - это идентификатор div.

Или вы можете использовать любое количество прокручиваемых плагинов, которые делают это более элегантным.

http://plugins.jquery.com/project/ScrollTo является примером.

4

Ни один из ответов выше не будет работать в SharePoint 2016.

Это должно быть сделано так: https://sharepoint.stackexchange.com/questions/195870/

var w = document.getElementById("s4-workspace");
w.scrollTop = 0;
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

Вы можете попробовать использовать JS, как в этом Fiddle 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>
3

Попробуйте это

<script>
  $(function(){
   $('a').click(function(){
    var href =$(this).attr("href");
   $('body, html').animate({
     scrollTop: $(href).offset().top
     }, 1000)
  });
 });
 </script>
3

Включить весь браузер. Удачи.

var process;
        var delay = 50; //milisecond scroll top
        var scrollPixel = 20; //pixel U want to change after milisecond
        //Fix Undefine pageofset when using IE 8 below;
        function getPapeYOfSet() {
            var yOfSet = (typeof (window.pageYOffset) === "number") ? window.pageYOffset : document.documentElement.scrollTop;
            return yOfSet;
        }



        function backToTop() {
            process = setInterval(function () {
                var yOfSet = getPapeYOfSet();
                if (yOfSet === 0) {
                    clearInterval(process);
                } else {
                    window.scrollBy(0, -scrollPixel);
                }
            }, delay);
        }
2

Если вы хотите прокрутить любой элемент с идентификатором, попробуйте следующее:

$('a[href^="#"]').bind('click.smoothscroll',function (e) {
    e.preventDefault();
    var target = this.hash;
    $target = $(target);
    $('html, body').stop().animate({
        'scrollTop': $target.offset().top
    }, 700, 'swing', function () {
        window.location.hash = target;
    });
});``
1

Когда верхняя прокрутка находится сверху вниз, чем нижний нижний и нижний к верхнему прокручиванию, заголовок является липким. Ниже приведен пример скрипта.

var lastScroll = 0;

$(document).ready(function($) {

$(window).scroll(function(){

 setTimeout(function() { 
    var scroll = $(window).scrollTop();
    if (scroll > lastScroll) {

        $("header").removeClass("menu-sticky");

    } 
    if (scroll == 0) {
    $("header").removeClass("menu-sticky");

    }
    else if (scroll < lastScroll - 5) {


        $("header").addClass("menu-sticky");

    }
    lastScroll = scroll;
    },0);
    });
   });

https://jsfiddle.net/memdumusaib/d52xcLm3/

0

document.getElementById("id of what you want to scroll to").scrollIntoView();

0

Для этого вам не нужно использовать javascript. Просто используйте "#" в качестве ссылки в href html-коде.

<a href="#">Top</a>
0

Для прокрутки элемента и элемента, находящихся в верхней части страницы

WebElement tempElement=driver.findElement(By.cssSelector("input[value='Excel']"));

            ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", tempElement);
0

Как ни странно, большинство из них не работало для меня ВСЕ, поэтому я использовал jQuery-ScrollTo.js с этим:

wrapper.find(".jumpToTop").click(function() {
    $('#wrapper').ScrollTo({
        duration: 0,
        offsetTop: -1*$('#container').offset().top
    });
});

И это сработало. $(document).scrollTop() возвращал 0, и этот фактически фактически работал.

-7

этот код может помочь вам

window.location.href = '#';

Ещё вопросы

Сообщество Overcoder
Наверх
Меню