Как я могу прокрутить до определенного места на странице, используя jquery?


133

Можно ли прокрутить до определенного места на странице с помощью jQuery?

Нужно ли иметь местоположение, которое я хочу прокрутить:

<a name="#123">here</a>

Или он может просто перейти к определенному идентификатору DOM?


3
просто небольшая заметка: атрибут «имя» не допускается в XHTML 1.1 Strict, используйте вместо этого идентификатор
— Juraj Blahunka

интересный вопрос, не можете использовать координаты страницы для прокрутки? Я думаю, что мы должны быть в состоянии.
— Омар Абид

Я получил решение, аналогичное вашему требованию, в [здесь] [1] [1]: stackoverflow.com/questions/3432656/…
— user1493023

@mrblah ваша проблема решена?
— Мегдад Хадиди

Ответы:


242

Плагин jQuery Scroll

так как это вопрос с тегом jquery, я должен сказать, что в этой библиотеке есть очень хороший плагин для плавной прокрутки, вы можете найти его здесь: http://plugins.jquery.com/scrollTo/

Выдержки из документации:

$('div.pane').scrollTo(...);//all divs w/class pane

или

$.scrollTo(...);//the plugin will take care of this

Пользовательская функция jQuery для прокрутки

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

$.fn.scrollView = function () {
    return this.each(function () {
        $('html, body').animate({
            scrollTop: $(this).offset().top
        }, 1000);
    });
}

и используйте это как:

$('#your-div').scrollView();

Прокрутить до координат страницы

Анимация htmlи bodyэлементы с scrollTopили scrollLeftатрибутами

$('html, body').animate({
    scrollTop: 0,
    scrollLeft: 300
}, 1000);

Простой javascript

прокрутка с window.scroll

window.scroll(horizontalOffset, verticalOffset);

только чтобы подвести итог, используйте window.location.hash, чтобы перейти к элементу с идентификатором

window.location.hash = '#your-page-element';

Непосредственно в HTML (улучшения доступности)

<a href="#your-page-element">Jump to ID</a>

<div id="your-page-element">
    will jump here
</div>

Спасибо @Juraj Blahunka, но я делаю это без какого-либо плагина
— Мегдад Хадиди 01

Ссылка не ведет меня в ScrollTo . Можете ли вы обновить его, пожалуйста?
— Barna Tekse

Это должен быть ответ!
— neelmeg

128

Да, даже в простом JavaScript это довольно просто. Вы даете элементу идентификатор, а затем можете использовать его как «закладку»:

<div id="here">here</div>

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

<a href="#here">scroll to over there</a>

Чтобы сделать это программно, используйте scrollIntoView()

document.getElementById("here").scrollIntoView()

@nickf Это пока поддерживается не везде. caniuse.com/#search=scrollIntoView
— Адитья Сингх

Это я определенно поддержал ( developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView ). Думаю, вы не правильно прочитали канюсу. Тем не менее, не будет анимированным. Довольно крутой прыжок, что не всегда хорошо.
— Перри

53

Никаких плагинов использовать не нужно, это можно сделать так:

var divPosition = $('#divId').offset();

затем используйте это, чтобы прокрутить документ до определенного DOM:

$('html, body').animate({scrollTop: divPosition.top}, "slow");

3
+1 Наверное, это лучший ответ. Не много кода и не требует плагина.
— Tricky12

1
Обратите внимание, что вам может потребоваться пересчитать смещение при изменении размера окна.
— Барт Бург

2
@BartBurg хороший момент - или просто пересчитайте прямо перед .animateзвонком
— mikermcneil

5
Люблю простой ответ. Почему люди должны все усложнять? Не хочу еще один плагин.
— sterfry68

1
Действительно лучший ответ.
— Роберт Росс

21

Вот чистая версия javascript:

location.hash = '#123';

Он будет прокручиваться автоматически. Не забудьте добавить префикс "#".


1
Используя примитивный способ именованной привязки, вы можете получить URL-адрес, который включает хэш. Например, mywebsite.com/page-about/#123 Закладки также включают поведение hash + scrollintoview.
— ОКВ

1
Было бы здорово, если бы вы могли немного объяснить
— Дж. Галлардо


5
<div id="idVal">
    <!--div content goes here-->
</div>
...
<script type="text/javascript">
     $(document).ready(function(){
         var divLoc = $('#idVal').offset();
         $('html, body').animate({scrollTop: divLoc.top}, "slow");
     });
</script>

В этом примере показано, как найти конкретный идентификатор div, в данном случае idVal. Если у вас есть последующие элементы div / таблицы, которые будут открываться на этой странице через ajax, вы можете назначить уникальные элементы div и вызвать скрипт для прокрутки к определенному месту для каждого содержимого элементов div.

Надеюсь, это будет полезно.


4
<script type="text/javascript">
    $(document).ready(function(){
        $(".scroll-element").click(function(){
            $('html,body').animate({
                scrollTop: $('.our_companies').offset().top
            }, 1000);

            return false;
        });
    })
</script>


Было бы здорово, если бы вы добавили несколько комментариев к своему коду. Как это помогает спрашивающему решить их вопрос?
— Артемикс


0

Вот вариант облегченного подхода @ juraj-blahunka . Эта функция не предполагает, что контейнер является документом, и прокручивается, только если элемент находится вне поля зрения. Анимация очереди также отключена, чтобы избежать ненужного подпрыгивания.

$.fn.scrollToView = function () {
    return $.each(this, function () {
        if ($(this).position().top < 0 ||
            $(this).position().top + $(this).height() > $(this).parent().height()) {
            $(this).parent().animate({
                scrollTop: $(this).parent().scrollTop() + $(this).position().top
            }, {
                duration: 300,
                queue: false
            });
        }
    });
};

У меня была проблема с отскоком, но ваш метод не работает
— Anon

0

Использование jquery.easing.min.js, с исправленными ошибками консоли IE

Html

<a class="page-scroll" href="#features">Features</a>
<section id="features" class="features-section">Features Section</section>


        <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
        <script src="js/jquery.js"></script>
        <!-- Include all compiled plugins (below), or include individual files as needed -->
        <script src="js/bootstrap.min.js"></script>

        <!-- Scrolling Nav JavaScript -->
        <script src="js/jquery.easing.min.js"></script>

Jquery

//jQuery to collapse the navbar on scroll, you can use this code with in external file with name scrolling-nav.js
        $(window).scroll(function () {
            if ($(".navbar").offset().top > 50) {
                $(".navbar-fixed-top").addClass("top-nav-collapse");
            } else {
                $(".navbar-fixed-top").removeClass("top-nav-collapse");
            }
        });
        //jQuery for page scrolling feature - requires jQuery Easing plugin
        $(function () {
            $('a.page-scroll').bind('click', function (event) {
                var anchor = $(this);
                if ($(anchor).length > 0) {
                    var href = $(anchor).attr('href');
                    if ($(href.substring(href.indexOf('#'))).length > 0) {
                        $('html, body').stop().animate({
                            scrollTop: $(href.substring(href.indexOf('#'))).offset().top
                        }, 1500, 'easeInOutExpo');
                    }
                    else {
                        window.location = href;
                    }
                }
                event.preventDefault();
            });
        });

Это слишком много кода для такой простой задачи. location.hash = 'idOfElement';должно хватить
— Колоб Каньон

0

Ты можешь использовать scroll-behavior: smooth; для этого без Javascript

https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-behavior


поведение прокрутки: плавно; не совместимо с браузером
— Super Model

проверьте совместимость браузера ниже по ссылке - developer.mozilla.org/en-US/docs/Web/CSS/…
— Sairam

Да, данная таблица в ваших ссылках показывает: Edge, IE и safari не совместимы с этим свойством.
— Super Model
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.