Прокрутіть назад до початку поділки, що прокручується


122
<div id="containerDiv"></div>
#containerDiv {
  position: absolute;
  top: 0px;
  width: 400px;
  height: 100%;
  padding: 5px;
  font-size: .875em;
  overflow-y: scroll;
}
document.getElementById("containerDiv").innerHTML = variableLongText;

Як наступного разу скинути положення прокрутки до верхньої частини контейнера?

Відповіді:


207
var myDiv = document.getElementById('containerDiv');
myDiv.innerHTML = variableLongText;
myDiv.scrollTop = 0;

Дивіться scrollTopатрибут.


Спробував, але не вийшло. Коли в розділ контейнера завантажено змінну Лонгтекст, і я переглядаю його середину, потім проведіть до нової змінної Лангтекст, вона відобразиться в контейнері, але ми не будемо дивитись на її верхню частину, вона вже буде прокручена трохи вниз.
десь

2
@ s12345 Ви краще зробіть тестовий зразок, який можна відтворити, показуючи нам вашу проблему (наприклад, на jsfiddle.net ) і скажіть, яку ОС / браузер / версію ви відчуваєте.
Фрогз

2
Вибачте за мою помилку .. працює! Поплутався з двома подібними дівами.
десь

63

Ще один спосіб зробити це з гладкою анімацією, такий

$("#containerDiv").animate({ scrollTop: 0 }, "fast");

7
Добре працює, але будь ласка , не використовуйте slow, це так ... повільно!
Паскаль

1
Замість того, щоб передавати slowяк другий аргумент. Ви можете передати ціле число, яке складе кількість мілісекунд для завершення анімації.
Сушант Гупта

2
Змінив його на швидкий :)
Махмуд Ібрагім

1
Найкраща відповідь! Дякую!
YogaPanda

1
Це добре працює, якщо ви використовуєте jquery. Якщо ви використовуєте кутовий машинопис (звичайний javascript), це не буде працювати. як ви можете досягти цього за допомогою простого javascript.
Бабулас

27

Я спробував існуючі відповіді на це питання, і жодна з них не працювала на Chrome для мене. Те, що працювало, було дещо іншим:

$('body, html, #containerDiv').scrollTop(0);

16

прокрутити до

window.scrollTo(0, 0);

є найкращим рішенням для прокрутки вікон до верху - найкраща частина полягає в тому, що для цього не потрібен селектор ідентифікаторів, і навіть якщо ми використовуємо структуру IFRAME, він буде працювати надзвичайно добре.

Метод scrollTo () прокручує документ до заданих координат.
window.scrollTo (xpos, ypos);
Необхідний номер xpos. Координату для прокрутки до осі x (горизонтальної) у пікселях
ypos Кількість необхідних. Координату для прокрутки до осі y (вертикальної) у пікселях

jQuery

Інший варіант зробити те саме - використовувати jQuery, і це дасть плавніший вигляд того ж

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

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


1
що робити, якщо ми хочемо лише прокрутити внутрішній поділ до вершини? Зрештою, це не вийде.
Джон Лорд

1
У елементах також є метод .scrollTo, який ви можете зробитиdocument.getElementById('scroller').scrollTo(0,0)
Мохімі

15

Це працювало для мене:

document.getElementById('yourDivID').scrollIntoView();

Це моє бажане рішення. Для плавного переходу додайте це:document.getElementById("yourDivID").scrollIntoView({behavior: "smooth", block: "start", inline: "nearest"})
Кріс

Також зауважте, що це scollIntoViewпрацює лише в тому випадку, якщо ви викликаєте його на елементі, який потрібно прокрутити. Іншими словами, не називайте його на елемент , який ви хочете , щоб прокрутити до , викличте його на елемент , який ви хочете прокрутки.
Кріс

9

Для тих, хто все ще не може зробити цю роботу, переконайтеся, що переповнений елемент відображається перед використанням функції jQuery .

Приклад:

$('#elem').show();
$('#elem').scrollTop(0);

1
Рятувальник життя! Починав втрачати волю до життя, коли scrollTop не працює! довелося помістити свій виклик scrollTop у функцію setTimeout.
AVFC_Bubble88

Я відчуваю те саме! Я працював у діалоговому вікні модального завантаження. Мені довелося налаштувати подію для модалу, який не скинув смугу прокрутки, доки модаль не перестане анімувати. Це код, який я використав: $ ('# add_modal'). On ('показано.bs.modal', функція (e) {$ ('div.border'). ScrollTop (0);});
Ірв Леннерт

2

Для мене спосіб scrollTop не працював, але я знайшов інше:

element.style.display = 'none';
setTimeout(function() { element.style.display = 'block' }, 100);

Не перевірив мінімальний час для надійного візуалізації css, однак, 100 мс може бути зайвим.


2

Якщо ви хочете прокрутити плавний перехід, ви можете скористатися цим!

(Ваніль JS)

const tabScroll = document.getElementById("tabScroll");
window.scrollTo({
  'behavior': 'smooth',
  'left': 0,
  'top': tabScroll.offsetTop - 80
});

Якщо вашими цільовими користувачами є Chrome та Firefox , це добре! Але, на жаль, цей метод недостатньо підтримується у всіх браузерах. Перевірте тут

Сподіваюся, це допомагає !!


2

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

Я працював у режимі завантаження, який я неодноразово створював дозволи на обліковий запис у діві, який переповнює розмір y. Моя проблема полягала в тому, що я намагався використовувати функцію jquery .scrollTop (0), і це не спрацювало, як би я не намагався це зробити. Мені довелося налаштувати подію для модалу, який не скинув смугу прокрутки, поки модаль не перестане анімувати. Код, який нарешті працював для мене, тут:

    $('#add-modal').on('shown.bs.modal', function (e) {
        $('div.border').scrollTop(0);
    });

1

Якщо вміст html переповнює один огляд, це працювало для мене, використовуючи лише JavaScript:

document.getElementsByTagName('body')[0].scrollTop = 0;

З повагою,


1

Це єдиний спосіб, який він працював для мене, з плавним переходом прокрутки:

  $('html, body').animate({
    scrollTop: $('#containerDiv').offset().top,
  }, 250);

1

Отримуючи елемент за назвою класу, не забудьте значення повернення - це масив; Звідси цей код:

document.getElementByClassName("dropdown-menu").scrollTop = 0

Не працювало б. Використовуйте код нижче.

document.getElementByClassName("dropdown-menu")[0].scrollTop = 0

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


0

ці два коди спрацювали для мене як принадність, для цього потрібно буде прокрутити до початку сторінки, але якщо ви хочете прокрутити якийсь конкретний div, використовуйте другий з вашим ідентифікатором div.

$('body, html, #containerDiv').scrollTop(0);
document.getElementById('yourDivID').scrollIntoView();

Якщо ви хочете прокрутити до назви класу, використовуйте наведений нижче код

var $container = $("html,body");
var $scrollTo = $('.main-content');

$container.animate({scrollTop: $scrollTo.offset().top - $container.offset().top + $container.scrollTop(), scrollLeft: 0},300);

0

Ідентифікатор повинен мати ідентифікатор відповідного div, який має властивість css overflow.

document.querySelector('#YOUR_OVERFLOWED_DIV').scrollTop = 0;

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