Przewiń z powrotem na górę przewijalnego elementu DIV


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;

Jak następnym razem zresetować pozycję przewijania do góry kontenera div?

Odpowiedzi:


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

Zobacz scrollTopatrybut.


Próbowałem, ale to nie zadziałało. Kiedy zmiennaLongtext jest ładowana do kontenera div i patrzę na jej środek, przesuń palcem do nowej zmiennej variableLongtext, pojawi się w kontenerze, ale nie będziemy patrzeć na jej górę, będzie już przewijana trochę w dół.
— imhere

2
@ s12345 Lepiej zrób odtwarzalny przypadek testowy, pokazujący nam twój problem (np. na jsfiddle.net ) i powiedz, w jakim systemie operacyjnym / przeglądarce / wersji tego doświadczasz.
— Phrogz

2
Przepraszam, mój błąd ... to działa! Pomyliłem się z dwoma podobnymi elementami div.
— imhere

63

Innym sposobem na zrobienie tego z płynną animacją jest ten

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

7
Działa dobrze, ale proszę , nie używaj slow, jest tak ... wolno!
— Pascal

1
Zamiast podawać slowjako drugi argument. Możesz podać liczbę całkowitą, która byłaby liczbą milisekund potrzebnych do zakończenia animacji.
— Sushant Gupta

2
Zmieniono to na szybkie :)
— Mahmoud Ibrahim

1
Najlepsza odpowiedź! Dzięki!
— YogaPanda

1
Działa to dobrze, jeśli używasz jquery. Jeśli używasz pisma kątowego (zwykły javascript), to nie zadziała. jak możesz to osiągnąć za pomocą zwykłego javascript.
— Babulaas

27

Wypróbowałem istniejące odpowiedzi na to pytanie i żadna z nich nie działała dla mnie w Chrome. To, co zadziałało, było nieco inne:

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

16

scrollTo

window.scrollTo(0, 0);

to najlepsze rozwiązanie do przewijania okien do góry - najlepsze jest to, że nie wymaga żadnego selektora identyfikatora i nawet jeśli użyjemy struktury IFRAME, będzie działać wyjątkowo dobrze.

Metoda scrollTo () przewija dokument do określonych współrzędnych.
window.scrollTo (xpos, ypos);
Wymagana liczba xpos. Współrzędna do przewinięcia wzdłuż osi X (poziomej) w pikselach
ypos Liczba wymagana. Współrzędna do przewinięcia wzdłuż osi Y (w pionie) w pikselach

jQuery

Inną opcją, aby zrobić to samo, jest użycie jQuery, które zapewni gładszy wygląd tego samego

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

gdzie 0 za scrollTop określa położenie pionowego paska przewijania w pikselu, a drugi parametr jest parametrem opcjonalnym, który pokazuje czas w mikrosekundach potrzebny do wykonania zadania.


1
co jeśli chcemy tylko przewinąć wewnętrzny element div do góry? To ostatecznie nie zadziała.
— John Lord

1
Elementy mają również metodę .scrollTo, którą możesz zrobićdocument.getElementById('scroller').scrollTo(0,0)
— Mojimi

15

To zadziałało dla mnie:

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

To jest moje preferowane rozwiązanie. Aby uzyskać płynne przejście, dodaj:document.getElementById("yourDivID").scrollIntoView({behavior: "smooth", block: "start", inline: "nearest"})
— Chris

Zauważ też, że scollIntoViewdziała tylko wtedy, gdy wywołasz ją na elemencie, który ma być przewijany. Innymi słowy, nie nazywaj go na elemencie, który chcesz przewinąć do , nazywają go na elemencie, który chcesz przewinąć.
— Chris

9

Dla tych, którzy nadal nie mogą tego zrobić, upewnij się, że przepełniony element jest wyświetlany przed użyciem funkcji jQuery .

Przykład:

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

1
Oszczędza życie! Zaczęło tracić chęć do życia, gdy scrollTop nie działał! musiałem umieścić moje wywołanie scrollTop w funkcji setTimeout.
— AVFC_Bubble88

Czuję to samo! Pracowałem w modalnym oknie dialogowym bootstrap. Musiałem ustawić zdarzenie dla modalu, które nie resetowało paska przewijania, dopóki modal nie przestał się animować. Oto kod, którego użyłem: $ ('# add_modal'). On ('shown.bs.modal', function (e) {$ ('div.border'). ScrollTop (0);});
— Irv Lennert

2

U mnie sposób scrollTop nie działał, ale znalazłem inne:

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

Nie sprawdziłem jednak minimalnego czasu niezawodnego renderowania css, 100 ms może być przesadą.


2

Jeśli chcesz przewijać z płynnym przejściem, możesz tego użyć!

(Wanilia JS)

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

Jeśli docelowymi użytkownikami są Chrome i Firefox , to dobrze! Ale niestety ta metoda nie jest wystarczająco dobrze obsługiwana we wszystkich przeglądarkach. Sprawdź tutaj

Mam nadzieję że to pomoże!!


2

Zgodnie z odpowiedzią François Noël „Dla tych, którzy nadal nie mogą tego zrobić, upewnij się, że przepełniony element jest wyświetlany przed użyciem funkcji jQuery”.

Pracowałem w trybie bootstrap, który wielokrotnie wywoływałem z uprawnieniami konta w elemencie div, który przepełnia wymiar y. Mój problem polegał na tym, że próbowałem użyć funkcji jquery .scrollTop (0) i nie działała ona bez względu na sposób, w jaki próbowałem to zrobić. Musiałem ustawić zdarzenie dla modalu, które nie resetowało paska przewijania, dopóki modal nie przestał się animować. Kod, który w końcu dla mnie zadziałał, jest tutaj:

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

1

Jeśli zawartość html przepełnia jeden widok, działało to dla mnie tylko przy użyciu javascript:

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

Pozdrowienia,


1

To jedyny sposób, w jaki to zadziałało, z płynnym przejściem przewijania:

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

1

Podczas pobierania elementu przez nazwę klasy nie zapomnij, że zwracana wartość jest tablicą; Stąd ten kod:

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

Nie zadziała. Zamiast tego użyj poniższego kodu.

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

Pomyślałem, że inni ludzie mogą napotkać podobny problem jak ja; więc to powinno załatwić sprawę.


0

te dwa kody działały dla mnie jak urok, który pierwszy przewinie na górę strony, ale jeśli chcesz przewinąć do jakiegoś konkretnego div, użyj drugiego z identyfikatorem div.

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

Jeśli chcesz przewijać według nazwy klasy, użyj poniższego kodu

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

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

0

Identyfikator Powinien mieć identyfikator odpowiedniego elementu div, który ma właściwość css przepełnienia.

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.