html5: asas rangkaian moden. Hari ini, SVG dan kanvas sering menjadi teknologi pilihan ketika mencipta imej interaktif-Flash telah dilupakan, Silverlight telah menjadi unicorn yang jarang berlaku di pinggir rangkaian, dan beberapa orang mengingati plugin pihak ketiga.
Kebaikan dan keburukan setiap teknik didokumentasikan dengan baik, tetapi secara ringkas, SVG lebih sesuai untuk mencipta dan mengendalikan unsur -unsur interaktif. Ini kerana SVG adalah format vektor berasaskan XML yang apabila imej dimuatkan ke dalam halaman menggunakan tag <svg></svg>
, setiap elemen di dalamnya boleh digunakan dalam SVG DOM.
Dalam artikel ini, saya ingin memperkenalkan anda kepada GraphicsJS, sebuah perpustakaan lukisan JavaScript sumber terbuka yang baru dan berkuasa berdasarkan SVG (untuk versi IE yang lebih tua, ia mempunyai alternatif VML). Saya akan mulakan dengan cepat memperkenalkan asas -asasnya dan kemudian mempamerkan keupayaan perpustakaan dengan dua contoh pendek dan indah: Contoh pertama adalah sepenuhnya mengenai seni, dan contoh kedua menunjukkan cara menulis yang mudah dalam kurang dari 50 baris seni teka -teki seni permainan.
Terdapat banyak perpustakaan yang membantu pemaju menggunakan SVG: raphaël, snap.svg, dan bonsaijs, untuk menamakan hanya beberapa perpustakaan terbaik. Perpustakaan ini masing -masing mempunyai kebaikan dan keburukan mereka, tetapi perbandingan menyeluruh mereka akan menjadi subjek artikel lain. Artikel ini adalah mengenai GraphicsJs, jadi saya jelaskan apa yang ada dan apa yang ada.
Kedua, ia adalah perpustakaan JavaScript sumber terbuka baru yang dikeluarkan pada musim gugur lepas oleh Anychart, salah satu pemaju perisian visualisasi data interaktif terkemuka di dunia. AnyChart telah menggunakan GraphicsJS selama sekurang-kurangnya tiga tahun (sejak pelepasan Anychart 7.0) untuk membuat carta dalam produk proprietinya, jadi GraphicsJS diuji sepenuhnya. (Penafian: Saya ketua R & D di Anychart dan pemaju utama di GraphicsJS)
Ketiga, tidak seperti perpustakaan lukisan JavaScript AnyChart, GraphicsJS tersedia secara percuma untuk projek komersial dan bukan keuntungan. Ia boleh didapati di GitHub di bawah lesen Apache.
Keempat, GraphicsJS mempunyai keserasian penyemak imbas dan menyokong Internet Explorer 6.0, Safari 3.0, Firefox 3.0, dan Opera 9.5. Ia diberikan dalam VML dalam versi IE yang lebih tua dan dalam SVG dalam semua pelayar lain.
Akhir sekali, GraphicsJS membolehkan anda menggabungkan grafik dan animasi dengan sempurna. Semak galeri utamanya, termasuk api api animasi, galaksi berputar, hujan, daun yang dihasilkan secara prosedur, dimainkan 15 permainan teka -teki dan banyak lagi. GraphicsJs mengandungi lebih banyak contoh dalam dokumentasi terperinci dan rujukan API yang komprehensif.
Untuk memulakan dengan GraphicsJS, anda perlu merujuk perpustakaan dan membuat elemen HTML peringkat blok untuk lukisan:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <title>GraphicsJS Basic Example</title> </head> <body> <div id="stage-container" style="width: 400px; height: 375px;"></div> <🎜> <🎜> </body> </html>
anda harus membuat panggung dan menarik sesuatu di dalamnya, seperti segi empat tepat, bulatan, atau bentuk lain:
// 创建舞台 var stage = acgraph.create('stage-container'); // 绘制矩形 var stage.rect(25, 50, 350, 300);
Berikut adalah contoh pada Codepen di mana kita melangkah lebih jauh dan menarik simbol Deathly Hallows.
apa -apa bentuk atau laluan boleh berwarna menggunakan tetapan mengisi dan tetapan strok. Segala -galanya mempunyai strok (sempadan), tetapi hanya bentuk dan laluan tertutup yang mempunyai padding. Tetapan isi dan strok sangat kaya, dan anda boleh menggunakan kecerunan linear atau bulat untuk mengisi dan strok. Di samping itu, garisan boleh bertitik dan menyokong imej yang mengisi dengan pelbagai mod jubin. Tetapi ini semua perkara yang cukup standard yang anda dapati di hampir mana -mana perpustakaan. Apa yang menjadikan GraphicsJS istimewa adalah ciri pengisian dan coraknya, yang bukan sahaja membolehkan anda menggunakan 32 (!) Corak mengisi mesh yang tersedia secara langsung, tetapi juga membolehkan anda dengan mudah membuat corak tersuai yang diperbuat daripada bentuk atau teks.
Sekarang, mari kita lihat apa sebenarnya yang dapat dicapai! Saya akan melukis lukisan seorang lelaki yang berdiri di dekat rumah dan mengisi dengan corak dan warna yang berbeza untuk meningkatkannya. Untuk kesederhanaan, mari kita menjadikannya lukisan seni kebudak -budakan (dan cuba untuk tidak melibatkan kekasaran seni). Itu sahaja:
// 创建舞台 var stage = acgraph.create('stage-container'); // 绘制框架 var frame = stage.rect(25, 50, 350, 300); // 绘制房子 var walls = stage.rect(50, 250, 200, 100); var roof = stage.path() .moveTo(50, 250) .lineTo(150, 180) .lineTo(250, 250) .close(); // 绘制一个人 var head = stage.circle(330, 280, 10); var neck = stage.path().moveTo(330, 290).lineTo(330, 300); var kilt = stage.triangleUp(330, 320, 20); var rightLeg = stage.path().moveTo(320, 330).lineTo(320, 340); var leftLeg = stage.path().moveTo(340, 330).lineTo(340, 340);
Lihat hasil pada codepen.
Seperti yang anda lihat, kami kini menggunakan pembolehubah - semua kaedah lukisan kandungan pada panggung mengembalikan rujukan kepada objek yang dicipta dan pautan ini boleh digunakan untuk menukar atau memadam objek.
Juga perhatikan bagaimana panggilan rantai (mis. stage.path().moveTo(320, 330).lineTo(320, 340);
) berada di mana -mana di GraphicsJS, yang membantu memendekkan kod. Panggilan rantaian hendaklah digunakan dengan berhati -hati, tetapi jika digunakan dengan betul, ia menjadikan kod itu lebih padat dan lebih mudah dibaca.
Sekarang, mari kita tangankan halaman pewarna ini kepada anak dan biarkan mereka melukis. Kerana walaupun kanak -kanak dapat menguasai teknik berikut:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <title>GraphicsJS Basic Example</title> </head> <body> <div id="stage-container" style="width: 400px; height: 375px;"></div> <🎜> <🎜> </body> </html>
Ini adalah bagaimana contoh kita kelihatan sekarang.
Sekarang, kita mempunyai gambar Highlander yang berdiri di sebelah kilt, berdiri di dekat istana bata dengan jerami di atas bumbung. Kita juga boleh berisiko mengatakan bahawa ini sememangnya karya seni yang kita mahu mendapatkan hak cipta. Mari kita lakukan ini menggunakan corak mengisi berdasarkan teks tersuai:
seperti yang anda lihat, ini mudah dilakukan: Anda membuat contoh objek teks, kemudian membentuk corak di panggung dan meletakkan teks ke dalam corak.// 创建舞台 var stage = acgraph.create('stage-container'); // 绘制矩形 var stage.rect(25, 50, 350, 300);
Lihat Rumah Hak Cipta Warna/Graphicsjs pada Codepen.
Buat permainan seni teka -teki dalam kurang daripada 50 baris kod
Nama permainan adalah
"menyapu jalan -jalan di angin", dan pemain memainkan peranan seorang pemulung dan menyapu jalan -jalan pada petang berangin pada musim luruh. Permainan ini menggunakan beberapa kod dari contoh daun yang dihasilkan oleh program di galeri GraphicsJS. Anda boleh melihat permainan selesai di Codepen (atau akhir artikel).
lapisan, zindex dan maya dom
Untuk permainan ini, kami akan menggunakan lapisan - objek dalam grafik yang digunakan untuk elemen kumpulan. Jika anda ingin menggunakan perubahan yang serupa dengan elemen (seperti transformasi), anda mesti kumpulan elemen. Anda boleh menukar lapisan dalam mod jeda (lebih lanjut mengenai ini kemudian), yang dapat meningkatkan prestasi dan pengalaman pengguna.
// 创建舞台 var stage = acgraph.create('stage-container'); // 绘制框架 var frame = stage.rect(25, 50, 350, 300); // 绘制房子 var walls = stage.rect(50, 250, 200, 100); var roof = stage.path() .moveTo(50, 250) .lineTo(150, 180) .lineTo(250, 250) .close(); // 绘制一个人 var head = stage.circle(330, 280, 10); var neck = stage.path().moveTo(330, 290).lineTo(330, 300); var kilt = stage.triangleUp(330, 320, 20); var rightLeg = stage.path().moveTo(320, 330).lineTo(320, 340); var leftLeg = stage.path().moveTo(340, 330).lineTo(340, 340);
Dalam demo ini, kami menggunakan fungsi lapisan untuk membantu kami mengumpulkan daun bersama -sama dan mengelakkan mereka menutup label (ia memberitahu kami berapa banyak daun disapu). Untuk melakukan ini, kami membuat tag dan panggil kaedah
, yang mewujudkan lapisan mengikat panggung. Kami menetapkan sifat lapisan ini ke harta stage.layer
di bawah label. zIndex
zIndex
// 给图片着色 // 精美的框架 frame.stroke(["red", "green", "blue"], 2, "2 2 2"); // 砖墙 walls.fill(acgraph.hatchFill('horizontalbrick')); // 草屋顶 roof.fill("#e4d96f"); // 格子呢裙 kilt.fill(acgraph.hatchFill('plaid'));
Convert
anda akan melihat bahawa setiap jalan dicipta dengan cara yang sama, tetapi kemudian penukaran akan dilakukan. Ini akan menghasilkan corak daun rawak yang sangat indah.
// 169 是版权符号的字符代码 var text = acgraph.text().text(String.fromCharCode(169)).opacity(0.2); var pattern_font = stage.pattern(text.getBounds()); pattern_font.addChild(text); // 用图案填充整个图像 frame.fill(pattern_font);
Peristiwa Pemprosesan
Dalam contoh permainan ini, kami menggunakan pendengar acara yang melekat pada objek daun supaya apabila pengguna melayang ke atas mereka, mereka hilang satu demi satu. Untuk melakukan ini, tambahkan kod berikut ke bahagian bawah fungsi drawLeaves
, sebelum pernyataan return
:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <title>GraphicsJS Basic Example</title> </head> <body> <div id="stage-container" style="width: 400px; height: 375px;"></div> <🎜> <🎜> </body> </html>
di sini kita juga dapat melihat bahawa kita menggunakan lapisan untuk mengira daun.
// 创建舞台 var stage = acgraph.create('stage-container'); // 绘制矩形 var stage.rect(25, 50, 350, 300);
Sila ambil perhatian bahawa kami tidak menyimpan jumlah daun di sini. Oleh kerana kita menambah daun ke lapisan tertentu dan mengeluarkan daun dari mereka, ini membolehkan kita mengesan berapa banyak elemen kanak -kanak yang kita ada (dan oleh itu berapa banyak daun yang tersisa).
GraphicsJS menyediakan DOM maya yang merupakan abstrak, ringan dan berasingan dari pelaksanaan SVG/VML khusus penyemak imbas. Ia sangat berguna untuk melakukan banyak perkara hebat seperti menjejaki semua objek dan lapisan, menggunakan transformasi kepada kumpulan, dan mengoptimumkan rendering dengan bantuan membolehkan kami mengesan dan mengawal proses rendering.
DOM maya dan pengendali acara membolehkan pengguna GraphicsJS mengawal rendering. Artikel prestasi dapat membantu anda memahami hubungan antara kandungan ini.
Apabila menjana daun dalam permainan, kita perlu berhenti sejenak apabila menambahkan daun baru, dan hanya menyambung semula rendering selepas semua perubahan selesai:
// 创建舞台 var stage = acgraph.create('stage-container'); // 绘制框架 var frame = stage.rect(25, 50, 350, 300); // 绘制房子 var walls = stage.rect(50, 250, 200, 100); var roof = stage.path() .moveTo(50, 250) .lineTo(150, 180) .lineTo(250, 250) .close(); // 绘制一个人 var head = stage.circle(330, 280, 10); var neck = stage.path().moveTo(330, 290).lineTo(330, 300); var kilt = stage.triangleUp(330, 320, 20); var rightLeg = stage.path().moveTo(320, 330).lineTo(320, 340); var leftLeg = stage.path().moveTo(340, 330).lineTo(340, 340);
Kaedah ini menangani unsur -unsur baru menjadikan daun baru muncul dengan segera.
Akhirnya, mulakan segala -galanya dengan memanggil shakeTree()
.
// 给图片着色 // 精美的框架 frame.stroke(["red", "green", "blue"], 2, "2 2 2"); // 砖墙 walls.fill(acgraph.hatchFill('horizontalbrick')); // 草屋顶 roof.fill("#e4d96f"); // 格子呢裙 kilt.fill(acgraph.hatchFill('plaid'));
Lihat Street Cleaner/Graphicsjs pada Codepen.
Peralihan ke HTML5 telah mengubah rangkaian. Ketika datang ke aplikasi web moden dan juga laman web yang mudah, kami sering menghadapi tugas yang memerlukan pemprosesan imej. Walaupun mustahil untuk mencari penyelesaian yang berfungsi dengan baik dalam setiap kes, anda harus mempertimbangkan perpustakaan GraphicsJS. Ia adalah sumber terbuka, teguh, dengan sokongan penyemak imbas yang sangat baik dan banyak ciri yang menjadikannya menyeronokkan, mudah dan tentu saja berguna.
Saya suka mendengar maklum balas anda di Grphicsjs dalam komen di bawah. Adakah anda sudah menggunakannya? Adakah anda akan mempertimbangkan untuk menggunakannya untuk projek baru? Saya suka tahu mengapa, atau mengapa tidak menggunakannya. Saya juga menulis senarai perpustakaan dan artikel lukisan utama JavaScript yang akan membandingkan dan membandingkan semuanya. Jangan ragu untuk menunjukkan ciri -ciri yang ingin anda lihat di sana.
Graphicsjs menonjol untuk sifatnya yang kuat dan ringan. Ia adalah perpustakaan yang kuat yang membolehkan pemaju untuk menarik dan menghidupkan sebarang grafik dengan ketepatan yang tinggi dan prestasi tinggi. Tidak seperti perpustakaan lain, GraphicsJS menyediakan satu set ciri yang komprehensif termasuk lapisan, kecerunan, corak, dan banyak lagi tanpa menjejaskan kelajuan atau kecekapan. Ia juga menyokong semua pelayar moden, menjadikannya pilihan serba boleh untuk pemaju.
Untuk memulakan dengan GraphicsJS, anda perlu memasukkan perpustakaan GraphicsJS dalam fail HTML anda. Anda boleh memuat turun perpustakaan dari laman web rasmi atau menggunakan CDN. Sebaik sahaja perpustakaan dimasukkan, anda boleh mula membuat grafik dengan memanggil fungsi dan kaedah yang sesuai yang disediakan oleh perpustakaan.
Ya, GraphicsJS direka untuk mengendalikan animasi kompleks dengan mudah. Ia menyediakan satu set ciri animasi yang kaya termasuk fungsi pelonggaran, kelewatan dan jangka masa. Anda boleh menghidupkan sebarang atribut graf, seperti kedudukan, saiz, warna, dan banyak lagi. Ini menjadikan GraphicsJs alat yang berkuasa untuk mewujudkan grafik interaktif dan dinamik.
GraphicsJS direka untuk bersesuaian dengan semua pelayar moden, termasuk Chrome, Firefox, Safari, dan Internet Explorer. Ia menggunakan SVG dan VML untuk rendering, yang semuanya menyokong mereka. Ini memastikan bahawa grafik anda kelihatan konsisten dan berfungsi dengan baik pada platform dan peranti yang berbeza.
Membuat kecerunan dengan GraphicsJS adalah mudah. Anda boleh menggunakan kaedah kecerunan untuk menentukan kecerunan linear atau radial, menentukan warna dan kedudukan, dan kemudian gunakan kecerunan untuk sebarang bentuk. Ini membolehkan anda membuat grafik berwarna -warni dengan mudah.
Ya, GraphicsJS menyediakan satu set keupayaan pengendalian acara yang membolehkan anda membuat grafik interaktif. Anda boleh melampirkan pendengar acara ke mana -mana graf, yang membolehkan anda bertindak balas terhadap tindakan pengguna seperti klik, pergerakan tetikus, dan banyak lagi. Ini menjadikan GraphicsJs pilihan yang sangat baik untuk membuat aplikasi web interaktif.
Ya, GraphicsJS menyokong lapisan, membolehkan anda mengatur grafik ke dalam kumpulan berasingan. Setiap lapisan boleh dikendalikan secara bebas, menjadikannya lebih mudah untuk menguruskan grafik kompleks. Anda juga boleh mengawal penglihatan dan z-order setiap lapisan, yang membolehkan kawalan grafik halus.
GraphicsJS menyediakan beberapa ciri yang dapat membantu anda mengoptimumkan grafik anda. Sebagai contoh, anda boleh menggunakan kaedah tanaman untuk menyembunyikan bahagian -bahagian grafik di luar kawasan tertentu, dengan itu mengurangkan jumlah rendering yang diperlukan. Anda juga boleh menggunakan kaedah cache untuk menyimpan output grafik yang diberikan, dengan itu meningkatkan prestasi apabila anda mengecat grafik dengan kerap.
Walaupun GraphicsJS tidak direka khusus untuk membuat carta dan grafik, keupayaan lukisan dan animasi yang kuat membolehkannya membuat apa -apa jenis grafik, termasuk carta dan grafik. Anda boleh menggunakan kaedah perpustakaan untuk menarik garis, lengkung, segi empat tepat, bulatan, dan banyak lagi untuk membuat pelbagai jenis carta.
Ya, GraphicsJS adalah perpustakaan sumber terbuka percuma. Anda boleh menggunakannya secara percuma dalam projek anda. Perpustakaan juga diselenggarakan secara aktif untuk memastikan ia selaras dengan piawaian dan teknologi web terkini.
Atas ialah kandungan terperinci Memperkenalkan Graphicsjs, perpustakaan grafik ringan yang kuat. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!