Як я можу прокрутити певне місце на сторінці за допомогою jquery?


133

Чи можна прокручувати певне місце на сторінці за допомогою jQuery?

Чи має бути місцезнаходження, яке я хочу прокрутити:

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

Або може просто перейти до певного ідентифікатора DOM?


3
лише невеличка примітка: атрибут "name" не дозволений у XHTML 1.1 Strict, використовуйте натомість ідентифікатор
Juraj Blahunka

цікаве запитання, не можете використовувати координати сторінок для прокрутки? Я думаю, що ми повинні вміти.
Омар Абід

Я отримав рішення , схоже на вашу вимогу [тут] [1] [1]: stackoverflow.com/questions/3432656 / ...
user1493023

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

Відповіді:


242

Плагін прокрутки jQuery

Оскільки це питання з тестом 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();

Перейдіть до координат сторінки

Animate 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, але я роблю це без будь-якого плагіна
Meghdad Hadidi

Посилання не веде мене до ScrollTo . Чи можете ви її оновити?
Барна Тексе

Це повинна бути відповідь!
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
Aditya Singh

Це я підтримую ( 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 .
okw

1
Було б чудово, якщо ви можете трохи пояснити
JGallardo


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" у цьому випадку. Якщо у вас є наступні діви / таблиці, які відкриються на цій сторінці через ajax, ви можете призначити унікальні диви та зателефонувати скрипту, щоб прокрутити до конкретного місця для кожного вмісту діви.

Сподіваюся, це стане в нагоді.


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 / ...
Сайрам

Так, наведена таблиця у ваших посиланнях показує: Edge, IE та safari не сумісні з цією властивістю.
Super Model
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.