Gulir kembali ke bagian atas div yang dapat digulir

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;

Bagaimana cara mengatur ulang posisi gulir kembali ke atas div kontainer di lain waktu?

Aku disini
sumber

Jawaban:

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

Lihat scrollTopatributnya.

Phrogz
sumber
Sudah mencoba tapi tidak berhasil. Ketika variabelLongtext dimuat di div wadah dan saya melihat di tengahnya, lalu geser ke variabelLongtext baru, itu akan muncul di wadah, tapi kita tidak akan melihat di atasnya, itu sudah akan digulir turun sedikit.
Ada
2
@ s12345 Sebaiknya Anda membuat kasus uji yang dapat direproduksi untuk menunjukkan masalah Anda (mis. di jsfiddle.net ) dan katakan pada OS / browser / versi apa Anda mengalami masalah ini.
Phrogz
2
Maaf kesalahan saya .. berhasil! Bingung dengan dua div serupa.
imhere
63

Cara lain untuk melakukannya dengan animasi yang halus adalah seperti ini

$("#containerDiv").animate({ scrollTop: 0 }, "fast");
Mahmoud Ibrahim
sumber
7
Bekerja dengan baik, tapi tolong jangan gunakan slow, ini sangat ... lambat!
Pascal
1
Bukannya lolos slowsebagai argumen kedua. Anda bisa memasukkan integer yang akan menjadi jumlah milidetik untuk menyelesaikan animasi.
Sushant Gupta
2
Menggantinya menjadi cepat :)
Mahmoud Ibrahim
1
Jawaban Terbaik! Terima kasih!
YogaPanda
1
Ini berfungsi dengan baik jika Anda menggunakan jquery. Jika Anda menggunakan skrip tipe sudut (javascript biasa) ini tidak akan berfungsi. bagaimana Anda bisa mencapai ini dengan javascript biasa.
Babulaas
27

Saya mencoba jawaban yang ada untuk pertanyaan ini, dan tidak ada yang berfungsi di Chrome untuk saya. Apa yang berhasil sedikit berbeda:

$('body, html, #containerDiv').scrollTop(0);
Produksi Sunnyside
sumber
16

scrollTo

window.scrollTo(0, 0);

adalah solusi pamungkas untuk menggulir jendela ke atas - bagian terbaiknya adalah tidak memerlukan pemilih id dan bahkan jika kita menggunakan struktur IFRAME itu akan bekerja dengan sangat baik.

Metode scrollTo () menggulung dokumen ke koordinat yang ditentukan.
window.scrollTo (xpos, ypos);
xpos Nomor Diperlukan. Koordinat untuk menggulir, sepanjang sumbu x (horizontal), dalam piksel
ypos Jumlah Diperlukan. Koordinat tujuan scroll, sepanjang sumbu y (vertikal), dalam piksel

jQuery

Opsi lain untuk melakukan hal yang sama adalah menggunakan jQuery dan ini akan memberikan tampilan yang lebih mulus

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

di mana 0 setelah scrollTop menentukan posisi scrollbar vertikal dalam piksel dan parameter kedua adalah parameter opsional yang menunjukkan waktu dalam mikrodetik untuk menyelesaikan tugas.

Gaurav Tiwari
sumber
1
bagaimana jika kita hanya ingin menggulir div internal ke atas? Ini pada akhirnya tidak akan berhasil.
John Lord
1
Elemen juga memiliki metode .scrollTo, Anda dapat melakukannyadocument.getElementById('scroller').scrollTo(0,0)
Mojimi
15

Ini berhasil untuk saya:

document.getElementById('yourDivID').scrollIntoView();
Rajat
sumber
Ini adalah solusi pilihan saya. Untuk transisi yang mulus, tambahkan ini:document.getElementById("yourDivID").scrollIntoView({behavior: "smooth", block: "start", inline: "nearest"})
Chris
Juga, perhatikan bahwa scollIntoViewhanya berfungsi jika Anda memanggilnya pada elemen yang akan di-scroll. Dengan kata lain, tidak menyebutnya pada elemen yang ingin Anda menggulir ke , sebut saja pada elemen yang Anda inginkan untuk menggulir.
Chris
9

Bagi mereka yang masih tidak bisa membuat ini berfungsi, pastikan elemen overflow ditampilkan sebelum menggunakan fungsi jQuery .

Contoh:

$('#elem').show();
$('#elem').scrollTop(0);
François Noël
sumber
1
Penolong! Mulai kehilangan keinginan untuk hidup dengan scrollTop tidak berfungsi! harus menempatkan panggilan scrollTop saya dalam fungsi setTimeout.
AVFC_Bubble88
Saya merasakan hal yang sama! Saya bekerja di kotak dialog modal bootstrap. Saya harus menyiapkan acara untuk modal yang tidak mengatur ulang scrollbar sampai modal berhenti beranimasi. Ini adalah kode yang saya gunakan: $ ('# add_modal'). On ('shown.bs.modal', function (e) {$ ('div.border'). ScrollTop (0);});
Irv Lennert
2

Bagi saya cara scrollTop tidak berfungsi, tetapi saya menemukan yang lain:

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

Namun, tidak memeriksa waktu minimum untuk rendering css yang andal, 100ms mungkin berlebihan.

AlexTR
sumber
2

Jika Anda ingin menggulir dengan transisi yang mulus, Anda dapat menggunakan ini!

(Vanilla JS)

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

Jika target pengguna Anda adalah Chrome dan Firefox , maka ini bagus! Namun sayangnya metode ini tidak didukung dengan cukup baik di semua browser. Cek Disini

Semoga ini membantu!!

Ashwin
sumber
2

Sesuai jawaban François Noël "Bagi mereka yang masih tidak dapat membuat ini berfungsi, pastikan bahwa elemen overflow ditampilkan sebelum menggunakan fungsi jQuery."

Saya telah bekerja dalam modal bootstrap yang berulang kali saya kemukakan dengan izin akun di div yang meluap pada dimensi y. Masalah saya adalah, saya mencoba menggunakan fungsi jquery .scrollTop (0) dan itu tidak akan berhasil tidak peduli bagaimana saya mencoba melakukannya. Saya harus menyiapkan acara untuk modal yang tidak mengatur ulang scrollbar sampai modal berhenti beranimasi. Kode yang akhirnya berhasil untuk saya ada di sini:

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

Jika konten html melebihi satu area pandang, ini berfungsi untuk saya hanya menggunakan javascript:

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

Salam,

Ruben
sumber
1

Ini adalah satu-satunya cara untuk saya, dengan transisi scrolling yang mulus:

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

Saat mendapatkan elemen dengan nama kelas, jangan lupa nilai yang dikembalikan adalah array; Karenanya kode ini:

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

Tidak akan berhasil. Gunakan kode di bawah ini sebagai gantinya.

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

Saya pikir orang lain mungkin menghadapi masalah yang sama seperti saya; jadi ini seharusnya berhasil.

Mahsan Nourani
sumber
0

kedua kode ini bekerja untuk saya seperti pesona yang pertama ini akan menggulir ke bagian atas halaman tetapi jika Anda ingin menggulir ke beberapa div tertentu gunakan yang kedua dengan id div Anda.

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

Jika Anda ingin menggulir ke dengan nama kelas gunakan kode di bawah ini

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

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

ID Harus memiliki id dari div terkait yang memiliki properti overflow css.

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

csandreas1
sumber