Saya ingin memiliki halaman web yang memiliki satu kata terpusat.
Saya ingin kata ini digambar dengan animasi, sehingga halaman "menulis" kata dengan cara yang sama seperti yang kita inginkan, yaitu mulai pada satu titik dan menggambar garis dan kurva dari waktu ke waktu sehingga hasil akhirnya adalah mesin terbang.
Saya tidak peduli apakah ini dilakukan dengan <canvas>
atau DOM, dan saya tidak peduli apakah itu dilakukan dengan JavaScript atau CSS. Tidak adanya jQuery akan menyenangkan, tetapi tidak diperlukan.
Bagaimana saya bisa melakukan ini? Saya telah mencari secara mendalam tanpa hasil.
javascript
css
canvas
html5-canvas
css-shapes
strugee
sumber
sumber
Jawaban:
Versi kanvas
Ini akan menarik karakter tunggal lebih seperti yang akan ditulis dengan tangan. Ini menggunakan pola dash panjang di mana pesanan on / off ditukar dari waktu ke waktu per karakter. Ini juga memiliki parameter kecepatan.
Contoh animasi (lihat demo di bawah)
Untuk meningkatkan realisme dan nuansa organik, saya menambahkan spasi huruf acak, offset y delta, transparansi, rotasi yang sangat halus dan akhirnya menggunakan font yang sudah "tulisan tangan". Ini dapat dibungkus sebagai parameter dinamis untuk menyediakan berbagai "gaya penulisan".
Untuk tampilan yang lebih realistis, data jalur akan diperlukan yang tidak secara default. Tetapi ini adalah potongan kode yang pendek dan efisien yang mendekati perilaku tulisan tangan, dan mudah diimplementasikan.
Bagaimana itu bekerja
Dengan mendefinisikan pola tanda hubung, kita dapat membuat semut berbaris, garis putus-putus, dan sebagainya. Mengambil keuntungan dari ini dengan mendefinisikan titik yang sangat panjang untuk titik "off" dan secara bertahap meningkatkan titik "on", itu akan memberikan ilusi menggambar garis ketika dibelai sambil menggerakkan panjang titik.
Karena titik mati begitu panjang, pola berulang tidak akan terlihat (panjangnya akan bervariasi dengan ukuran dan karakteristik jenis huruf yang digunakan). Jalur surat akan memiliki panjang sehingga kita perlu memastikan bahwa kita memiliki setiap titik setidaknya mencakup panjang ini.
Untuk huruf yang terdiri dari lebih dari satu jalur (mis. O, R, P dll.) Karena satu untuk garis besar, satu untuk bagian berongga, garis-garis akan tampak digambar secara bersamaan. Kami tidak bisa berbuat banyak tentang itu dengan teknik ini karena akan membutuhkan akses ke setiap segmen jalur untuk dibelai secara terpisah.
Kesesuaian
Untuk browser yang tidak mendukung elemen kanvas cara alternatif untuk menampilkan teks dapat ditempatkan di antara tag, misalnya teks gaya:
Demo
Ini menghasilkan animasi stroke-on langsung ( tidak ada ketergantungan ) -
sumber
Edit 2019
Saya membuat perpustakaan javascript yang dapat membuat animasi realistis. Mudah digunakan dan memerlukan file JSON khusus yang bertindak sebagai font.
Lihat halaman Github untuk dokumentasi dan contoh. Dan Codepen
Jawaban Sebelumnya
Contoh di bawah ini menggunakan snap.js untuk secara dinamis membuat
tspan
elemen dan kemudian menghidupkan masing-masingstroke-dashoffset
.Tampilkan cuplikan kode
Jawaban Sebelumnya
Anda dapat melakukan sesuatu seperti ini menggunakan svg
stroke-dasharray
Tampilkan cuplikan kode
Tanpa
keyframes
animasi Anda dapat melakukan hal seperti iniTampilkan cuplikan kode
Dan untuk dukungan IE Anda dapat menggunakan jquery / javascript
Tampilkan cuplikan kode
sumber
$(this).css('fill', 'red')
panggilan balik ke animasiHanya CSS:
sumber
Setelah banyak tes, berikut adalah beberapa catatan. Tujuannya adalah untuk menampilkan data teks cepat dengan cara yang paling tidak menghalangi, pada halaman berat DOM yang membutuhkan interaksi pengguna.
Tentu saja ada banyak cara untuk mencapai hal yang sama. Pada contoh ini, perbedaannya mungkin tidak jelas, itu benar-benar berlaku untuk antarmuka yang kompleks.
Paling lambat :
innerHTML
dan gaya inline. DOM dihitung ulang di setiap iterasi. Browser bekerja keras untuk menjaga kereta. Ini akan gagal dengan cepat, menyebabkan kebocoran memori dan membeku:Cara yang lebih baik : Menggunakan
textContent
,requestAnimationFrame
dan api animasi web. Ini berjalan lebih lancar, sudah jelas di halaman berat DOM. Interaksi pengguna tidak akan memblokir repaints. Beberapa pengecatan mungkin dilewati, agar antarmuka tetap responsif.Pada contoh di atas, DOM masih dihitung ulang untuk limpahan teks .. Kita bisa melihat debugger berkedip keras. Ini sangat penting pada elemen cascading! Ini masih bisa memperlambat javascript dan pengguliran pengguna.
Kekuatan penuh : Adalah mungkin untuk menggunakan css sendiri untuk menyegarkan data dengan
content
aturan css dan variabel css. Teks tidak akan dipilih.Tes saya menunjukkan peningkatan besar, mesin javascript melompati tugas-tugas lain dengan cepat. Kadang-kadang itu bisa mulai sedikit lebih lambat daripada contoh di atas. Tapi di samping itu, ini tidak memblokir gulungan pengguna, dan debugger juga menyukai, tidak ada lagi lompatan.
sumber