Анімаційна прокрутка до ідентифікатора при завантаженні сторінки


123

Я хочу анімувати прокрутку до певного ідентифікатора при завантаженні сторінки. Я провів багато досліджень і натрапив на це:

$("html, body").animate({ scrollTop: $('#title1').height() }, 1000);

але це, здається, починається від ідентифікатора та анімувати до початку сторінки?

HTML (який знаходиться на половині сторінки вниз) просто:

<h2 id="title1">Title here</h2>

1
Це не дуже відповідь, але я дуже рекомендую плагін "scrollTo" Аріеля Флеслера; у нього є багато можливостей для панорамування сторінки та декілька розширень плагіна для звичайних випадків (наприклад, ви можете знайти його плагін "LocalScroll" корисним для прокрутки до href посилання, якщо він знаходиться на одній сторінці). Ви можете отримати плагін тут: flesler.blogspot.com/2007/10/jqueryscrollto.html
Faisal

Відповіді:


327

Ви прокручуєте лише висоту свого елемента. offset () повертає координати елемента відносно документа, а topparam дасть вам відстань елемента в пікселях уздовж осі y:

$("html, body").animate({ scrollTop: $('#title1').offset().top }, 1000);

Ви також можете додати затримку до нього:

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

1
Що з автоматичної прокрутки змушує мене перейти "WOW COOL !!"? Можливо, це простота вашого рішення.
theblang

Мені потрібно було прокрутити елемент для перегляду на завантаження сторінки, але було два питання: а) за допомогою "html, body" дали два зворотних виклику (по одному для кожного відповідного елемента). b) Залежно від браузера, яке тіло або html працює. Тому я створив суть, яку ви можете адаптувати для використання у вашому проекті, щоб забезпечити роботу прокрутки для перегляду в "будь-якому" браузері, і що ви отримаєте лише один зворотний виклик, коли анімація закінчиться. gist.github.com/netsi1964/4ddffe1ae14e05220d25
Netsi1964

2
Це не зовсім правильно. Ви дійсно повинні враховувати поточне положення прокрутки тіла чи елемента, до якого ми намагаємось scroll. Зважаючи на це, ви б додали поточну позицію прокрутки bodyдо offset().topпозиції елемента, який ми хочемо переглянути. Отримана сума - це значення, до якого ми хочемо прокрутити. $('html, body').animate({ scrollTop: ($('html, body').scrollTop() + $('#title1').offset().top) }, 1000);
mattdevio

@magreenberg Ви спробували це? Якщо поточна позиція прокрутки перевищує значення 0, те, що ви пропонуєте, може не працювати. Скажімо, контейнер, який прокручується, має висоту 1000 пікселів, а поточна позиція прокрутки - 1000. Скажімо, елемент, який ви прокручуєте, розташований у вертикальному центрі на 500. Я думаю, що те, що ви пропонуєте, дозволить йому прокрутити до 1500 , правда?
BumbleB2na

@ BumbleB2na .offset().topдасть вам негативне число в цьому випадку. І це справді працює лише, bodyі htmlоскільки offset().topзбирається надати вам верхнє зміщення документа, а не призначеного батька прокрутки.
mattdevio

12

Чисте рішення JavaScript з функцією scrollIntoView () :

document.getElementById('title1').scrollIntoView({block: 'start', behavior: 'smooth'});
<h2 id="title1">Some title</h2>

Параметр 'smooth' PS зараз працює з Chrome 61, як вказано в коментарях julien_c .


1
Працює зараз (від Chrome 61)
julien_c

Не забудьте перевірити сумісність браузера. З 10/2018 IE (11) Edge та Safari підтримують "scrollIntoView", але не "гладкий" варіант.
metal_jacke1

Чистий JS ftw. Дякуємо за цей фрагмент! Гладкий як подвійний масляний крем
Жан д'арме


3

Для цього існує плагін jquery. Він прокручує документ до конкретного елемента, щоб він ідеально знаходився посеред вікна перегляду. Він також підтримує послаблення анімації, щоб ефект прокрутки виглядав би дуже гладко. Перевірте це посилання .

У вашому випадку код є

$("#title1").animatedScroll({easing: "easeOutExpo"});

"Він також підтримує послаблення анімації, щоб ефект прокрутки виглядав би дуже гладко" На жаль, це не відповідає дійсності. Якщо комп'ютер з якоїсь причини повільний, він просто продовжує стрибати, фактично не рухаючись належним чином.
brunoais

Для плавного прокручування потрібно обчислити багато пікселів. Звичайно, повільний "комп'ютер" (більше GPU) не може цього зробити, але через відсутність достатньої кількості АЛУ. Так що він взагалі правий. І справді легко прокручуючи губку.
Роланд

1

спробуйте з наступним кодом. створити елементи зі сторінкою імені класу -прокрутки та зберегти ідентифікаційне ім'я hrefвідповідних посилань

$('a.page-scroll').bind('click', function(event) {
        var $anchor = $(this);
        $('html, body').stop().animate({
            scrollTop: ($($anchor.attr('href')).offset().top - 50)
        }, 1250, 'easeInOutExpo');
        event.preventDefault();
    });

-3

для простої прокрутки використовуйте наступний стиль

висота: 200px; переповнення: прокручування;

і використовуйте цей клас стилів, який розділ або розділ ви хочете показати прокрутки

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