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?

Jestem tutaj
źródło

Odpowiedzi:

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

Zobacz scrollTopatrybut.

Phrogz
źródło
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");
Mahmoud Ibrahim
źródło
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);
Sunnyside Productions
źródło
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.

Gaurav Tiwari
źródło
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();
Rajat
źródło
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);
François Noël
źródło
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ą.

AlexTR
źródło
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!!

Ashwin
źródło
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);
    });
Irv Lennert
źródło
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,

Ruben
źródło
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);
Fred K.
źródło
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ę.

Mahsan Nourani
źródło
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);
Amir shah
źródło
0

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

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

csandreas1
źródło