Apakah ada cara untuk mengontrol pengguliran browser dengan JavaScript / jQuery?
Ketika saya menggulir halaman saya setengah jalan ke bawah, kemudian memicu memuat ulang, saya ingin halaman untuk pergi ke atas, tetapi sebaliknya mencoba untuk menemukan posisi gulir terakhir. Jadi saya melakukan ini:
$('document').ready(function() {
$(window).scrollTop(0);
});
Tapi tidak berhasil.
EDIT :
Jadi kedua jawaban Anda berfungsi ketika saya memanggil mereka setelah halaman dimuat-Terima kasih. Namun, jika saya hanya melakukan refresh pada halaman, sepertinya browser menghitung dan menggulir ke posisi gulir yang lama SETELAH .ready
acara (saya juga menguji fungsi body onload ()).
Jadi tindak lanjutnya adalah, adakah cara untuk MENCEGAH browser menggulir ke posisi sebelumnya, atau untuk menggulir ulang ke atas SETELAH ia melakukan hal itu?
sumber
Jawaban:
Wow, saya terlambat 9 tahun untuk pertanyaan ini. Ini dia:
Tambahkan kode ini ke beban Anda.
history.scrollRestorasi dukungan Browser:
Chrome: didukung (sejak 46)
Firefox: didukung (sejak 46)
IE / Edge: tidak didukung (Belum ..)
Opera: didukung (sejak 33)
Safari: didukung
Untuk IE / Edge jika Anda ingin menggulir ulang ke atas SETELAH itu otomatis turun maka ini bekerja untuk saya:
sumber
Solusi lintas-browser, murni JavaScript:
sumber
$(window).one("scroll",function() { /* the code from my answer here */ });
Anda hampir mendapatkannya - Anda perlu mengatur
scrollTop
tentangbody
, tidakwindow
:EDIT:
Mungkin Anda dapat menambahkan jangkar kosong ke bagian atas halaman:
sumber
'html','body'
karena peramban modern akan menggulir berdasarkan badan tetapi IE8 dan di bawah hanya akan menggulir dengan 'html', 'tubuh'Solusi jquery berikut ini berfungsi untuk saya:
sumber
Berikut ini adalah versi gulir animasi JavaScript murni untuk no-jQuery'ers: D
Lalu:
sumber
requestAnimationStep
daripadasetTimeout
. Juga tidak menjawab pertanyaan OP.MEMPERBARUI
Pergi ke atas halaman dengan efek gulir sedikit lebih mudah di javascript sekarang dengan:
https://developer.mozilla.org/en-US/docs/Web/API/Window/scroll
PERINGATAN
Kami telah menggunakan ini dalam proyek kami yang lebih baru, tetapi saya baru saja memeriksa dokumen mozilla sekarang sambil memperbarui jawaban saya dan saya yakin itu telah diperbarui. Sekarang metode ini
window.scroll(x-coord, y-coord)
dan tidak menyebutkan atau menunjukkan contoh yang menggunakanobject
parameter di mana Anda dapat mengaturbehavior
untuksmooth
. Saya baru saja mencoba kode dan masih berfungsi di chrome dan firefox dan parameter objek masih dalam spesifikasi .Jadi gunakan ini dengan hati-hati atau Anda dapat menggunakan Polyfill ini . Selain bergulir ke atas, polyfill ini juga menangani metode lain:
window.scrollBy
,element.scrollIntoView
, dllJAWABAN TUA
Ini adalah
javascript
implementasi vanilla kami . Ini memiliki efek pelonggaran sederhana sehingga pengguna tidak terkejut setelah mengklik tombol Atas .Sangat kecil dan semakin kecil saat diperkecil. Pengembang mencari alternatif untuk metode jquery tetapi ingin hasil yang sama dapat mencoba ini.
JS
HTML
Bersulang!
sumber
Ini bekerja untuk saya:
Gunakan short
setTimeout
di dalamonload
untuk memberi browser kesempatan untuk melakukan gulir.sumber
Anda dapat menggunakannya dengan jQuery
sumber
Gunakan fungsi berikut
Di sini xpos Diperlukan. Koordinat untuk menggulir ke, di sepanjang sumbu x (horizontal), dalam piksel
ypos juga diperlukan. Koordinat untuk menggulir ke, sepanjang sumbu-y (vertikal), dalam piksel
sumber
Gunakan ini
sumber
Kode berikut berfungsi di Firefox, Chrome dan Safari , tetapi saya tidak dapat menguji ini di Internet Explorer. Adakah yang bisa mengujinya, lalu mengedit jawaban atau komentar saya?
sumber
Solusi Javascript murni (animasi) saya:
Penjelasan:
window.scrollY
adalah variabel yang dikelola oleh browser dengan jumlah piksel dari atas yang telah digulirkan oleh jendela.window.scrollTo(x,y)
adalah fungsi yang menggulirkan jendela sejumlah piksel pada sumbu x dan sumbu y.Dengan demikian,
window.scrollTo(0,window.scrollY-20)
pindahkan halaman 20 piksel ke atas.The
setTimeout
memanggil fungsi lagi di 10 milidetik sehingga kita kemudian dapat memindahkannya 20 piksel (animasi), danif
cek pernyataan jika kita masih perlu gulir.sumber
Mengapa Anda tidak menggunakan elemen referensi saja di awal file html Anda, seperti
dan kemudian, ketika halaman dimuat, lakukan saja
Jika peramban bergulir setelah fungsi ini diaktifkan, Anda cukup melakukannya
sumber
Gulir lintas-browser ke atas:
Gulir lintas-browser ke suatu elemen dengan id = div_id:
sumber
Untuk menjawab pertanyaan yang diedit, Anda dapat mendaftarkan
onscroll
pawang seperti:Ini akan membuatnya sehingga upaya pertama untuk menggulir (yang kemungkinan yang otomatis dilakukan oleh browser) akan dibatalkan secara efektif.
sumber
Jika Anda dalam mode quircks (terima kasih @Niet the Dark Absol):
Jika Anda dalam mode ketat:
Tidak perlu jQuery di sini.
sumber
Ini bekerja:
sumber
Dalam kasus saya tubuh tidak berfungsi:
Tetapi HTML berfungsi:
sumber
'html','body'
sebagai peramban modern FF, Chrome akan menggulir berdasarkan badan tetapi IE8 dan di bawah hanya akan menggulir dengan'html','body'
Kombinasi keduanya membantu saya. Tidak ada jawaban lain yang membantu saya karena saya punya sidenav yang tidak bergulir.
sumber
sumber
tanpa animasi, adil
scroll(0, 0)
(vanilla JS)sumber
Jika ada yang menggunakan desain sudut dan material dengan sidenav. Ini akan mengirim Anda ke bagian atas halaman:
sumber
Seeint hash harus melakukan pekerjaan. Jika Anda memiliki tajuk, Anda dapat menggunakan
jika tidak, # saja akan berfungsi
Dan ketika itu ditulis ke dalam url, itu akan tetap jika Anda menyegarkan.
Faktanya, Anda tidak perlu membutuhkan JavaScript untuk itu jika Anda ingin melakukannya di acara onclick, Anda harus meletakkan tautan di sekitar elemen Anda dan memberinya # sebagai href.
sumber
Pertama-tama tambahkan tag anchor kosong ke tempat yang Anda tuju
Sekarang tambahkan fungsi di bagian header
akhirnya tambahkan acara onload ke tag tubuh
sumber
Versi generik yang berfungsi untuk semua nilai X dan Y, dan sama dengan window.scrollUntuk api, hanya dengan penambahan scrollDuration.
* Versi generik yang cocok dengan window.scrollUntuk browser api **
sumber
Saya ingat melihat ini diposting di tempat lain (saya tidak dapat menemukan di mana), tetapi ini bekerja dengan sangat baik:
Ini aneh, tetapi cara kerjanya didasarkan dari cara kerja antrian tumpukan JavaScript. Penjelasan lengkap dapat ditemukan di sini di bagian Zero Delays.
Gagasan dasarnya adalah bahwa waktu untuk
setTimeout
tidak benar-benar menentukan jumlah waktu yang ditetapkan itu akan menunggu, tetapi jumlah minimum waktu itu akan menunggu. Jadi, ketika Anda mengatakannya untuk menunggu 0ms, browser menjalankan semua proses antrian lainnya (seperti menggulir jendela ke tempat Anda terakhir) dan kemudian menjalankan panggilan balik.sumber
sumber