mata teras
- adalah fungsi penolong yang digunakan untuk menulis animasi yang disegerakkan dengan kitaran lukisan penyemak imbas, dengan itu mencapai kesan animasi yang lebih lancar dan lebih banyak. Ia disokong oleh semua pelayar moden dan serasi dengan pelayar yang lebih tua.
requestAnimationFrame
Fungsi - boleh direka untuk menerima satu siri fungsi sebagai parameter, yang dipanggil secara urutan, dengan itu melaksanakan urutan animasi. Fungsi ini dapat menjejaki kemajuan animasi dan mengira masa akhir animasi.
requestAnimationFrame
animate
Mewujudkan animasi lebih cekap daripada - atau
requestAnimationFrame
kerana ia berfungsi serentak dengan kadar penyegaran penyemak imbas. Ia boleh digunakan dengan mana-mana kerangka JavaScript atau perpustakaan dan boleh mengendalikan pelbagai animasi, termasuk sifat CSS, animasi kanvas, animasi SVG, dan animasi berasaskan interaksi pengguna atau pengguna.setTimeout
setInterval
Animasi elemen dom melibatkan mengubah gaya CSS setiap milisaat untuk mewujudkan ilusi gerakan. Ini bermakna lulus fungsi panggil balik ke
sekali lagi untuk beratur bingkai animasi seterusnya. setTimeout
Fungsi penolong baru ini menjadi animasi. Ia pada mulanya dilihat di Firefox 4 dan secara beransur -ansur telah diterima pakai oleh semua pelayar, termasuk IE 10. Nasib baik, mudah untuk menjadikannya serasi dengan pelayar yang lebih tua. setTimeout
requestAnimationFrame
window.requestAnimationFrame(callbackFunction);(berjalan selepas kelewatan masa yang ditentukan),
menjalankan fungsi panggil balik pada masa akan datang penyemak imbas menarik skrin. Ini membolehkan anda menyegerakkan dengan kitaran lukisan penyemak imbas supaya anda tidak terlalu kerap atau tidak cukup kerap, yang bermaksud animasi anda akan sangat lancar dan tidak membebankan CPU. setTimeout
requestAnimationFrame
Pada masa ini setiap pelayar mempunyai versi prefixed , jadi mari kita mengesan versi mana yang disokong dan merujuknya:
requestAnimationFrame
Perhatikan bagaimana kami menggunakan notasi kurungan persegi untuk mengakses sifat pada objek tetingkap. Kami menggunakan notasi kurungan persegi kerana kami membina nama harta secara dinamik menggunakan penyambungan rentetan. Jika penyemak imbas tidak menyokongnya, kami akan kembali kepada fungsi biasa yang memanggil
var _requestAnimationFrame = function(win, t) { return win["webkitR" + t] || win["r" + t] || win["mozR" + t] || win["msR" + t] || function(fn) { setTimeout(fn, 60) } }(window, "equestAnimationFrame");
setTimeout
Pembinaan fungsi animasi
Sekarang mari kita membina fungsi mudah yang akan berulang kali memanggil kami untuk mensimulasikan animasi. Untuk melaksanakan animasi, kita memerlukan fungsi luaran sebagai titik masuk dan fungsi dalaman (dipanggil fungsi langkah) yang akan dipanggil berulang kali.
window.requestAnimationFrame(callbackFunction);
Setiap kali kita memanggil fungsi langkah, kita perlu menjejaki kemajuan animasi untuk mengetahui bila ia berakhir. Kami akan mengira masa apabila animasi harus berakhir dan mengira kemajuan berdasarkan masa yang tinggal untuk setiap kitaran.
var _requestAnimationFrame = function(win, t) { return win["webkitR" + t] || win["r" + t] || win["mozR" + t] || win["msR" + t] || function(fn) { setTimeout(fn, 60) } }(window, "equestAnimationFrame");
Perhatikan bahawa kami menggunakan new Date()
untuk mendapatkan masa semasa dalam milisaat. Tanda Plus membuang objek tarikh ke jenis data angka. rate
Pembolehubah adalah nombor antara 0 dan 1, menunjukkan kadar kemajuan animasi.
Penambahbaikan fungsi anime
Sekarang kita perlu mempertimbangkan input dan output fungsi. Mari biarkan fungsi menerima fungsi dan tempoh sebagai parameter.
function animate() { var step = function() { _requestAnimationFrame(step); } step(); }
kita boleh memanggil fungsi ini seperti ini:
function animate() { var duration = 1000 * 3, // 3 秒 end = +new Date() + duration; var step = function() { var current = +new Date(), remaining = end - current; if (remaining < 60) { // 如果剩余时间少于 60 毫秒,则在此结束动画 return; } else { var rate = 1 - remaining / duration; // 执行一些动画操作 } _requestAnimationFrame(step); } step(); }
Dalam fungsi run
, saya akan meletakkan beberapa kod yang menghidupkan lebar nod dari "100px" hingga "300px".
function animate(item) { var duration = 1000 * item.time, end = +new Date() + duration; var step = function() { var current = +new Date(), remaining = end - current; if (remaining < 60) { item.run(1); // 1 = 进度为 100% return; } else { var rate = 1 - remaining / duration; item.run(rate); } _requestAnimationFrame(step); } step(); }
Fungsi animasi yang lebih baik
Ia berfungsi dengan baik, tetapi apa yang saya mahukan adalah dapat memasukkan pelbagai fungsi yang dipanggil dalam urutan. Dengan cara ini, selepas animasi pertama berakhir, animasi kedua akan bermula. Kami akan merawat array sebagai timbunan, muncul item satu demi satu demi satu. Mari tukar input:
animate({ time: 3, // 以秒为单位的时间 run: function(rate) { /* 使用 rate 执行某些操作 */ } });
Apabila animasi pertama dijalankan, item
adalah null, remaining
kurang dari 60 milisaat, jadi kami pop item pertama dari array dan mula melaksanakannya. Dalam bingkai terakhir animasi, remaining
juga kurang dari 60, jadi kami melengkapkan animasi semasa, muncul item seterusnya dari array dan mula menghidupkan item seterusnya. Juga ambil perhatian bahawa saya telah lulus nilai rate
melalui formula pelonggaran. Nilai dari 0 hingga 1 kini berkembang dalam bahagian padu, menjadikannya kelihatan kurang sengit. Untuk memanggil fungsi animasi, kami melakukan perkara berikut:
animate({ time: 3, run: function(rate) { document.getElementById("box").style .width = (rate * (300 - 100) + 100) + "px"; } });
Sila ambil perhatian bahawa lebar kotak pertama berkembang, mengambil 2 saat, kemudian ketinggian berkembang, dan mengambil 2 saat.
Pengoptimuman kod
mari membersihkan kod kami sedikit. Sila ambil perhatian bahawa kami memanggil getElementById
beberapa kali, yang tidak begitu baik. Mari cache itu dan cache semasa cache nilai permulaan dan akhir.
function animate(list) { var item, duration, end = 0; var step = function() { var current = +new Date(), remaining = end - current; if (remaining < 60) { if (item) item.run(1); // 1 = 进度为 100% item = list.shift(); // 获取下一个项目 if (item) { duration = item.time * 1000; end = current + duration; item.run(0); // 0 = 进度为 0% } else { return; } } else { var rate = remaining / duration; rate = 1 - Math.pow(rate, 3); // 缓动公式 item.run(rate); } _requestAnimationFrame(step); }; step(); }
Perhatikan bahawa kita tidak perlu mengubahsuai fungsi utama, kerana fungsi run
sentiasa menjadi sebahagian daripada objek mandiri dan boleh mengakses semua sifat objek melalui pembolehubah this
. Sekarang, apabila kita menjalankan fungsi langkah, kita cache semua pembolehubah. Itu sahaja. Fungsi penolong animasi yang mudah yang mengambil kesempatan daripada requestAnimationFrame
dan menyediakan kejatuhan untuk pelayar yang lebih tua.
(bahagian demo skrip ditinggalkan kerana kod JavaScript tidak dapat dijalankan dalam persekitaran ini.)
(bahagian Soalan Lazim menggunakan RequestAnimationFrame untuk animasi mudah juga ditinggalkan, kerana kandungannya sangat diduplikasi dari teks asal, dan anda hanya perlu menyimpan titik teras untuk menyelesaikan pseudo-asal.)
Atas ialah kandungan terperinci Animasi ringkas menggunakan RequestAnimationFrame. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Penjelasan terperinci mengenai kaedah penggantian rentetan javascript dan Soalan Lazim Artikel ini akan meneroka dua cara untuk menggantikan watak rentetan dalam JavaScript: Kod JavaScript dalaman dan HTML dalaman untuk laman web. Ganti rentetan di dalam kod JavaScript Cara yang paling langsung ialah menggunakan kaedah pengganti (): str = str.replace ("cari", "ganti"); Kaedah ini hanya menggantikan perlawanan pertama. Untuk menggantikan semua perlawanan, gunakan ungkapan biasa dan tambahkan bendera global g: str = str.replace (/fi

Jadi di sini anda, bersedia untuk mempelajari semua perkara ini yang dipanggil Ajax. Tetapi, apa sebenarnya? Istilah Ajax merujuk kepada kumpulan teknologi longgar yang digunakan untuk membuat kandungan web yang dinamik dan interaktif. Istilah Ajax, yang asalnya dicipta oleh Jesse J

10 Plugin Permainan JQuery yang menyeronokkan untuk menjadikan laman web anda lebih menarik dan meningkatkan keletihan pengguna! Walaupun Flash masih merupakan perisian terbaik untuk membangunkan permainan web kasual, jQuery juga boleh menghasilkan kesan yang mengejutkan, dan walaupun tidak setanding dengan permainan flash aksi tulen, dalam beberapa kes, anda juga boleh bersenang -senang di penyemak imbas anda. permainan jquery tic toe "Hello World" pengaturcaraan permainan kini mempunyai versi jQuery. Kod sumber JQuery Game Composition Crazy Word Ini adalah permainan mengisi kosong, dan ia dapat menghasilkan beberapa hasil yang pelik kerana tidak mengetahui konteks perkataan. Kod sumber JQuery Mine Sweeping Game

Tutorial ini menunjukkan cara membuat kesan latar belakang paralaks yang menawan menggunakan jQuery. Kami akan membina sepanduk header dengan imej berlapis yang mewujudkan kedalaman visual yang menakjubkan. Plugin yang dikemas kini berfungsi dengan JQuery 1.6.4 dan kemudian. Muat turun

Artikel membincangkan membuat, menerbitkan, dan mengekalkan perpustakaan JavaScript, memberi tumpuan kepada perancangan, pembangunan, ujian, dokumentasi, dan strategi promosi.

Artikel ini membincangkan strategi untuk mengoptimumkan prestasi JavaScript dalam pelayar, memberi tumpuan kepada mengurangkan masa pelaksanaan dan meminimumkan kesan pada kelajuan beban halaman.

Matter.js adalah enjin fizik badan tegar 2D yang ditulis dalam JavaScript. Perpustakaan ini dapat membantu anda dengan mudah mensimulasikan fizik 2D dalam penyemak imbas anda. Ia menyediakan banyak ciri, seperti keupayaan untuk mencipta badan yang tegar dan menetapkan sifat fizikal seperti jisim, kawasan, atau ketumpatan. Anda juga boleh mensimulasikan pelbagai jenis perlanggaran dan daya, seperti geseran graviti. Matter.js menyokong semua pelayar arus perdana. Di samping itu, ia sesuai untuk peranti mudah alih kerana ia mengesan sentuhan dan responsif. Semua ciri-ciri ini menjadikannya bernilai masa untuk belajar menggunakan enjin, kerana ini memudahkan untuk membuat permainan atau simulasi 2D berasaskan fizik. Dalam tutorial ini, saya akan merangkumi asas -asas perpustakaan ini, termasuk pemasangan dan penggunaannya, dan menyediakan

Artikel ini menunjukkan bagaimana untuk menyegarkan semula kandungan div secara automatik setiap 5 saat menggunakan jQuery dan Ajax. Contohnya mengambil dan memaparkan catatan blog terkini dari suapan RSS, bersama -sama dengan timestamp refresh terakhir. Imej pemuatan adalah opsyena


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

SecLists
SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

EditPlus versi Cina retak
Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

Penyesuai Pelayan SAP NetWeaver untuk Eclipse
Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

Muat turun versi mac editor Atom
Editor sumber terbuka yang paling popular

PhpStorm versi Mac
Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).