Saya mencari animasi "gulir ke atas" lintas-peramban yang sederhana yang dapat saya terapkan ke tautan. Saya tidak ingin memerlukan perpustakaan JS seperti jQuery / Moo, dll.
// jQuery Equivilant to convert to pure JS...
$('html, body').animate({scrollTop:0}, 400);
Saya kasus sempurna untuk seseorang yang seharusnya belajar JS 100% sebelum melompat ke perpustakaan. :(
javascript
Heather Hins
sumber
sumber
var something = $(...)
), menciptakan trilyun objek dalam setiap fungsi (mereka tahu variabel, tetapi tidak tahu bahwavar veryBigObject = {...}
dengan beberapa ratus properti di bagian atas fungsi akan membunuh kinerja). Dan sangat sering mereka bahkan tidak tahu nama bahasa Javascript, bukan jQuery.Jawaban:
Demo:
sumber
document.documentElement
alih-alihdocument.body
(kecuali Anda menetapkan CSS:)body{height:100%;}
. Demo kerja menggunakan konsep ini: jsfiddle.net/S5ALP/1if (duration <= 0) return;
top.window.scroll(0, value)
alih-alihelement.scrollTop = value
membuatnya bekerja di Chrome dan Firefox (Ubuntu). :)Sepertinya sudah ada banyak solusi. Lagi pula, inilah yang lain, menggunakan persamaan pelonggaran ..
sumber
requestAnimationFrame
requestAnimationFrame
tidak kompatibel dengan semua peramban secara spsly di beberapa ponsel, jadi ini bukan solusi yang dinamis, lihat: developer.mozilla.org/en-US/docs/Web/API/window/…requestAnimationFrame
yang harus mengurus semua ketidakcocokan browserDapatkan dari artikel tentang Smooth Scrolling .
Jika diperlukan, ada beberapa polyfill yang tersedia.
sumber
scrollIntoView({behavior: 'smooth'})
ada juga, dan dapat melakukan apa yang orang butuhkan untuk masalah seperti ini.Uncaught TypeError: Failed to execute 'scroll' on 'Window': No function was found that matched the signature provided.
Saya memodifikasi jawaban TimWolla untuk menggunakan kuadrat pelonggaran (sedikit lebih lancar :). Berikut adalah contoh aksi: di jsFiddle . Fungsi pelonggaran tersedia di sini: Fungsi Pelonggaran Robert Penner
sumber
document. documentElement
tidak berfungsi di Chrome.Tanpa kode JQuery, Semoga ini bisa membantu Anda.
panggil fungsi TopscrollTo () ini pada acara klik tombol atau pada elemen / acara lain yang Anda inginkan.
sumber
Saya memodifikasi kode @TimWolla untuk menambahkan lebih banyak opsi dan beberapa fungsi gerakan. Juga, menambahkan dukungan ke crossbrowser dengan document.body.scrollTop dan document.documentElement.scrollTop
http://jsfiddle.net/forestrf/tPQSv/
Versi yang diperkecil: http://jsfiddle.net/forestrf/tPQSv/139/
sumber
1 / duration
ketika Anda memanggil scrollToX untuk pertama kalinya?Sebenarnya ada cara javascript murni untuk mencapai ini tanpa menggunakan
setTimeout
ataurequestAnimationFrame
atau jQuery.Singkatnya, cari elemen di scrollView yang ingin Anda gulir, dan gunakan scrollIntoView
el.scrollIntoView({behavior:"smooth"});
Ini adalah sebuah plunkr .
sumber
scrollIntoViewOption
tidak memiliki dukungan lintas browser. developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoViewDiadaptasi dari jawaban ini :
Ini akan memungkinkan Anda untuk menggulir dengan lancar (fungsi cosinus) dari mana saja ke "y" yang ditentukan.
sumber
Tidak ada yang menyebutkan perilaku gulir properti CSS
CSS
JS
sumber
KURANGI GELAS SEKOLAH JAVASCRIPT
Ini adalah pertanyaan lama tapi saya pikir saya bisa menjawab dengan beberapa hal mewah dan beberapa opsi untuk dimainkan jika Anda ingin memiliki kontrol lebih besar atas animasi.
Ini dia JS Class murni untuk menangani pengguliran untuk Anda:
MELIHAT DEMO DI CODEPEN ATAU PERGI KE BOTTOM DAN JALANKAN SINPET
SCRIPT KELAS LENGKAP + GUNAKAN CONTOH:
sumber
Mudah.
sumber
window.scrollTo(x, y);
..scrollTop
dan.scrollLeft
.*scroll
ketika menghitung posisi gulir. Namun, saya tidak melihat ada yang hilang;
...Baru saja membuat solusi javascript ini di bawah ini.
Penggunaan sederhana:
Objek mesin (Anda dapat mengutak-atik filter, nilai fps):
sumber
console.warn
Dan parameter string disetTimeout
tidak cocok dalam kode produksi (yang kedua cukup banyak tidak cocok di mana saja, karenaeval
pada dasarnya).Membangun beberapa jawaban di sini, tetapi menggunakan beberapa matematika sederhana untuk transisi yang lancar menggunakan kurva sinus:
Pemakaian:
PS. perhatikan gaya ES6
sumber
Ini adalah pendekatan lintas browser berdasarkan jawaban di atas
sumber
difference
danperTick
?Namun pendekatan lain menggunakan window.scrollBy
JSFiddle
sumber
Saya telah memilih versi @timwolla jawab @akai dan menambahkan fungsi stopAnimation sebagai balasan, jadi sebelum memulai animasi baru, yang lama dapat dihentikan.
sumber
Pendekatan lintas browser lain berdasarkan pada solusi di atas
Caranya adalah mengontrol perubahan gulir yang sebenarnya, dan jika itu nol, ubah elemen gulir.
sumber
Animasi bergulir linear ke bawah. JS murni, tanpa JQuery. Mungkin solusi saya akan membantu seseorang.
Anda dapat mengubah variabel
action_count
,speed_ms
untuk mengonfigurasi animasi gulir sesuai selera Anda.sumber
Gunakan solusi ini
Terima kasih
sumber
animate()
fungsi dalam lingkup jendela ... Saya pikir Anda salah paham. TheElement.animate()
Fungsi tidak diakui oleh banyak browser. Lihat developer.mozilla.org/en-US/docs/Web/API/Element/animateSaya melihat bahwa sebagian besar dari semua posting di atas mencari tombol dengan javascript. Ini berfungsi, selama Anda hanya memiliki satu tombol. Saya akan merekomendasikan mendefinisikan elemen "klik" di dalam tombol. "Onclick" itu kemudian akan memanggil fungsi yang menyebabkannya bergulir.
Jika Anda melakukannya seperti itu, Anda dapat menggunakan lebih dari satu tombol, asalkan tombolnya terlihat seperti ini:
sumber