Beberapa hari yang lalu, rakan sekerja saya menunjukkan kepada saya kesan khas iaitu jigsaw puzzle Bezanya teka-teki tersebut adalah animasi. Dia minta saya buat DEMO, jadi saya buat sendiri buat seketika, dan memang tak susah pun. Ia mudah dilakukan dengan kanvas. Jadi catatan blog ini tidak sesuai untuk pakar. . . . Saya hanya menulisnya secara santai untuk keseronokan.
Rendering:
Sekurang-kurangnya apabila saya mula-mula melihat ini, saya fikir ia agak novel, jadi saya fikir untuk membuatnya untuk keseronokan Jika anda rasa poster itu keluar, sila berikan saya ibu jari
Tanpa berlengah lagi, mari kita mulakan dengan DEMO: Teka-teki Video (Anda mungkin perlu menunggu seketika untuk melihat kesannya. Saya membuat pautan video terus dari w3school. Anda boleh seret dan lepaskannya. Ia sangat mudah, dan mungkin masih mempunyai beberapa pepijat. Lagipun, ia hanya DEMO untuk berseronok. Jelaskan prinsipnya.) Perkara lain ialah melukis bingkai semasa video ke dalam kanvas nampaknya tidak disokong pada peranti mudah alih. . . . Sekurang-kurangnya saya melihatnya pada iPad saya dan mendapati bahawa saya tidak boleh melukis Jika sesiapa tahu cara menyelesaikan masalah ini, sila jawab untuk saya. Saya amat berterima kasih
Prinsip: Setiap kepingan teka-teki ialah kanvas dan kanvas luar skrin juga diperlukan. Mula-mula buat teg video
Dan sembunyikan video, dan kemudian lukiskan setiap bingkai ke dalam kanvas luar skrin apabila memainkan video (kanvas luar skrin ialah kanvas tersembunyi, digunakan untuk menyimpan data Kaedah penulisan adalah sangat mudah:
)., hanya gunakan kaedah drawImage untuk melukisnya secara langsung. Mengapa menggunakan kanvas luar skrin dahulu kerana jika anda melukis terus setiap bingkai data ke dalam kanvas semua kepingan teka-teki pada masa yang sama, penyemak imbas akan ranap serta-merta. Jadi gunakan kanvas luar skrin sebagai penimbal. Mula-mula simpan data bingkai semasa ke kanvas, dan kemudian lukiskan kanvas ke dalam kanvas sebagai kepingan teka-teki. Melukis kanvas ke dalam kanvas juga sangat mudah, anda juga boleh menggunakan drawImage:
ctx2.drawImage(cs , -this.cols*this.w , -this.rows*this.h , vw , vh);
Kemudian. . . . Prinsipnya semudah itu. Saya ingin mengingatkan anda kemudian bahawa apabila menggunakan requestAnimationFrame untuk melintas bingkai, anda perlu mengehadkan kelajuan Sebagai contoh, seperti yang ditulis di bawah, saya mengambil setiap 30 milisaat ~50 milisaat. Jika terlalu rendah, penyemak imbas akan ranap dengan mudah. Jika terlalu tinggi, ia akan menyebabkan penyemak imbas tersekat, video akan membeku