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

133

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

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

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

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

mrblah
источник
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
источник
@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
Было бы здорово, если бы вы могли немного объяснить
Дж. Галлардо
6

Обычный Javascript:

window.location = "#elementId"
Луис Пикансо
источник
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.

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

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

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

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

Попробуй это

<div id="divRegister"></div>

$(document).ready(function() {
location.hash = "divRegister";
});
Аджай-Systematix
источник
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
            });
        }
    });
};
Richie
источник
У меня была проблема с отскоком, но ваш метод не работает
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