Hari ini saya akan menggariskan teknik yang anda boleh menyesuaikan diri dengan projek web anda-mencetuskan animasi ketika menatal ke rantau yang telah ditetapkan. Animasi ini akan dibuat menggunakan transformasi CSS dan peralihan CSS. Kami juga akan menggunakan jQuery untuk mengesan apabila unsur -unsur dapat dilihat dan menambah/mengeluarkan kelas yang sesuai.
Bagi mereka yang ingin melihat contoh -contoh ini dalam tindakan, anda boleh melompat terus ke demo.
Takeaways Key
Kami mungkin mahu memudar unsur -unsur, atau memberikan transformasi yang menarik dan ini hanya akan masuk akal apabila pengguna benar -benar dapat melihatnya.
animasi dengan CSS atau dengan jQuery?
Saya akan menggunakan transformasi melalui CSS, namun selalu ada pembolehubah untuk dipertimbangkan bergantung pada keadaan anda. Saya akan mengambil kira faktor berikut:
Oleh kerana penyelesaian kami akan berdasarkan transformasi, keserasian pelayar kami akan terhad kepada mereka yang menyokong sama ada transformasi 2D atau transformasi 3D.
Semua pelayar moden akan menyokong transformasi 3D dan beberapa pelayar warisan yang lebih tua seperti Internet Explorer 9 dan Opera 11.5 akan menyokong transformasi 2D. Sokongan keseluruhan untuk kedua -dua desktop dan pelayar mudah alih adalah komprehensif.
Kaedah Animate JQuery berfungsi dalam pelayar (waras), dengan syarat anda menggunakan versi 1.x perpustakaan. JQuery 2.x Sokongan dikeluarkan untuk IE8 dan ke bawah, jadi hanya gunakan ini jika anda tidak perlu menyokong pelayar warisan (bertuah anda!).
Kami mahu animasi yang cepat dan lancar, terutamanya ketika datang ke peranti mudah alih. Oleh itu, yang terbaik untuk menggunakan peralihan dan transformasi jika mungkin.
Contohnya akan menggunakan transformasi 3D dengan 2D jatuh untuk penyemak imbas yang lebih tua. Kami mahu memaksa pecutan perkakasan untuk kelajuan, jadi transformasi 3D adalah suatu keharusan (kami akan menggunakan Translate3D bersama -sama dengan fungsi lain yang menyebabkan GPU dipercepat rendering).
Kaedah Animate JQuery jauh lebih perlahan daripada transformasi bantuan GPU, jadi kami hanya akan menggunakan jQuery untuk pengendalian / pengiraan acara kami, bukan untuk animasi kami sendiri (seperti yang kita mahu mereka menjadi lancar).nota sampingan
mengesan elemen animasi dalam pandangan
pemilih Caching
Dalam skrip kami, kami akan merujuk kedua -dua objek tetingkap dan koleksi unsur -unsur yang kami mahu bernyawa.
<span>//Cache reference to window and animation items </span><span>var $animation_elements = $('.animation-element'); </span><span>var $window = $(window);</span>
Seterusnya, kami membuat pengendali acara kami yang mendengar acara tatal. Ini akan membakar apabila kita menatal halaman. Kami menyampaikannya kepada fungsi check_if_in_view kami (yang akan kami dapatkan dalam satu minit). Setiap kali acara tatal dipecat, fungsi ini akan dilaksanakan.
<span>//Cache reference to window and animation items </span><span>var $animation_elements = $('.animation-element'); </span><span>var $window = $(window);</span>
Kerana kita mengira ketinggian dan lebar kita perlu faktor perubahan orientasi bersama dengan saiz semula umum.
Kami boleh mengemas kini pengendali acara kami untuk mendengar kedua -dua skrol dan mengubah saiz acara. Ini akan membolehkan fungsi pengesanan kami berfungsi apabila kami mengubah saiz atau menukar orientasi.
$<span>window.on('scroll', check_if_in_view);</span>
Di samping itu, kami juga menggunakan kaedah pencetus jQuery untuk mencetuskan acara tatal sebaik sahaja DOM siap. Kami melakukan ini supaya jika mana -mana elemen yang sepatutnya animasi berada dalam viewport, mereka akan dikesan seperti yang dilihat dan animasi yang digunakan seolah -olah kami telah menatal.
$<span>window.on('scroll resize', check_if_in_view);</span>
Bahagian pengesanan sebenar contoh ini berasal dari skrip berikut.
$<span>window.trigger('scroll');</span>
mari memecahkan apa yang berlaku di sini.
fungsi check_if_in_view dipanggil pada mulanya apabila DOM siap dan kemudian setiap kali kita mengubah saiz atau tatal.
kami mendapat ketinggian semasa tetingkap, bersama dengan kedudukan atas dan bawahnya sehingga kami tahu kawasan yang kami lihat.
kita pergi dan mencari semua item yang akan menghidupkan (disimpan dalam pembolehubah $ animasi_elements). Bagi setiap elemen ini, kami mengumpulkan ketinggiannya bersama dengan kedudukan atas dan bawahnya (jadi kami tahu di mana ia tinggal di halaman).
Kami membandingkan setiap item untuk melihat sama ada kedudukan bawahnya lebih besar daripada kedudukan teratas tetingkap tetapi juga bahawa kedudukan atas item kurang daripada kedudukan bawah tetingkap.
Berikut adalah contoh visual
Dalam fungsi pengesanan kami, kami perlu mendapatkan ketinggian dan kedudukan pelbagai elemen untuk mengira perkara dengan betul, ini adalah di mana kami telah menggunakan fungsi ketinggian jQuery. Adalah penting untuk mengalami pecahan bagaimana fungsi ketinggian ini berfungsi
fungsi ketinggian () dan lebar () mengembalikan ketinggian atau lebar elemen. Mereka mengecualikan semua padding, sempadan dan margin.
Untuk pecahan penuh melawat dokumentasi ketinggian atau lebar.
fungsi innerheight () dan innerWidth () mengembalikan ketinggian atau lebar elemen termasuk padding tambahan (namun ia tidak termasuk kedua -dua sempadan dan margin)
Untuk pecahan penuh lawati dokumentasi innerheight atau innerwidth.
fungsi outerheight () dan oUerberwidth () mengembalikan ketinggian atau lebar elemen dan termasuk padding dan sempadannya.
Di samping itu, anda juga boleh menentukan untuk memasukkan marginnya dengan meluluskan nilai yang benar kepada fungsi.
untuk pecahan penuh Lawati dokumentasi outerheight atau oUterwidth
Disenaraikan di bawah adalah satu siri animasi yang menggunakan asas -asas apa yang telah kita bincangkan. Contoh-contoh ini akan mencari elemen animasi dan menggunakan kelas dalam pandangan aktif apabila mereka berada dalam pandangan.
unsur-unsur yang anda ingin bergerak harus semua mempunyai kelas standard seperti elemen animasi yang menetapkan kedudukannya menjadi relatif atau mutlak. Di samping itu, jika anda akan membuat pelbagai kesan, anda boleh membuat kelas yang sepadan seperti slaid-kiri yang boleh digabungkan dengan kelas dalam pandangan. Anda kemudiannya harus memohon transformasi ke kelas seperti elemen animasi.slide- left.inview
Untuk contoh pertama kami, kami akan meluncur di unsur -unsur dari kiri apabila mereka memasuki Viewport. Kami mencapai ini dengan menggunakan terjemahan3D pada paksi unsur -unsur kami.
Lihat animasi pena CSS pada tatal - slaid dari kiri oleh SitePoint (@SitePoint) pada codepen.
Dalam contoh ini kami telah menggunakannya untuk memaparkan profil kakitangan, tetapi anda boleh memanfaatkan semula fungsi yang sama untuk meluncur dalam mana-mana unsur yang anda perlukan.
Kali ini kita akan memudar unsur -unsur kita dari bawah ke atas sebagai skrol pengguna. Kami mencapai ini melalui Terjemahan3D pada paksi Y elemen.
Untuk contoh ini saya telah menyenaraikan maklumat kursus mengenai topik dalam struktur grid. Apabila pengguna menatal ke bawah, setiap kad yang dipandang akan memudar dan bergerak ke atas, memaparkan maklumat mengenai kursus.
Lihat animasi pena CSS pada tatal - pudar dari bawah ke atas oleh SitePoint (@SitePoint) pada codepen.
Untuk contoh terakhir kami, kami akan menggunakan animasi multistage. Untuk melakukan ini, kami akan mentakrifkan animasi kekunci utama yang menggabungkan putaran dengan terjemahan. Animasi jenis ini boleh membantu mempamerkan kawasan laman web anda (untuk contoh ini kami mempamerkan profil ahli kakitangan).
Lihat animasi pena CSS pada tatal - Multi langkah langkah oleh SitePoint (@SitePoint) pada Codepen.
dari sini anda boleh mengambil konsep yang telah anda pelajari dan memohon kepada projek anda.
Sekarang anda boleh mengesan apabila elemen dilihat, anda boleh mengikat transformasi atau kesan tambahan untuk mewujudkan antara muka interaktif. Contohnya apabila elemen memasuki viewport (dan selepas transformasinya), anda boleh mengubah elemen tambahan seperti memudar dalam tajuk, berskala dalam imej dan lain -lain
Adakah anda sudah menggunakan kesan ini dalam projek anda? Atau adakah anda berfikir bahawa animasi terlalu banyak digunakan dan mengurangkan pengalaman pengguna? Sama ada saya suka mendengar daripada anda dalam komen.
Ambil kemahiran CSS anda ke peringkat seterusnya dengan Buku CSS Master, edisi ke -2 oleh Tiffany B. Brown - meliputi animasi CSS, peralihan, transformasi dan banyak lagi. Soalan Lazim (Soalan Lazim) Mengenai Animasi Berbasis Skrol dengan JQuery dan CSS3
Bagaimana saya boleh membuat animasi berasaskan skrol saya lebih lancar? -Out 'Nilai harta peralihan CSS3-fungsi-fungsi. Nilai ini menentukan bahawa animasi harus bermula dengan perlahan, mempercepatkan di tengah, dan kemudian melambatkan pada akhir. Ini dapat memberikan rasa yang lebih semula jadi dan lancar kepada animasi anda.
Atas ialah kandungan terperinci Membuat animasi berasaskan tatal menggunakan jQuery dan CSS3. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!