Rumah > hujung hadapan web > tutorial js > Memperkenalkan Graphicsjs, perpustakaan grafik ringan yang kuat

Memperkenalkan Graphicsjs, perpustakaan grafik ringan yang kuat

尊渡假赌尊渡假赌尊渡假赌
Lepaskan: 2025-02-17 10:42:15
asal
261 orang telah melayarinya

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.

mata utama

  • GraphicsJS adalah perpustakaan lukisan JavaScript yang baru, kuat dan terbuka berdasarkan SVG dan menyediakan alternatif VML untuk versi IE yang lebih tua. Ia ringan dan fleksibel, dengan API JavaScript yang kaya.
  • Diterbitkan oleh Anychart, perpustakaan telah diberikan dalam produk proprietari Anychart selama sekurang -kurangnya tiga tahun, memastikan keteguhannya. Tidak seperti Galeri Lukisan JavaScript AnyChart, GraphicsJS tersedia secara percuma untuk projek komersial dan bukan keuntungan.
  • GraphicsJS adalah keserasian silang 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.
  • Perpustakaan ini membolehkan gabungan grafik dan animasi, termasuk api api animasi, galaksi berputar, hujan, dan permainan teka -teki yang boleh dimainkan. Ia juga mengandungi dokumentasi terperinci dan rujukan API yang komprehensif.
  • Perpustakaan GraphicsJS boleh digunakan untuk membuat aplikasi web interaktif, termasuk lapisan, kecerunan, corak, pemprosesan acara, dan pengoptimuman prestasi. Ia juga menyokong animasi dan transformasi yang kompleks, menjadikannya pilihan serba boleh untuk pemaju.

mengapa memilih graphicsjs

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.

Introducing GraphicsJS, a Powerful Lightweight Graphics Library

Pertama sekali, GraphicsJS ringan dan mempunyai API JavaScript yang sangat fleksibel. Ia melaksanakan banyak ciri teks yang kaya, serta DOM maya yang berasingan daripada pelaksanaan HTML DOM khusus pelayar.

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.

Asas GraphicsJS

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>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

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);
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Berikut adalah contoh pada Codepen di mana kita melangkah lebih jauh dan menarik simbol Deathly Hallows.

Karya pertama kami

isi, strok dan corak mengisi

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);
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

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>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

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);
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Lihat Rumah Hak Cipta Warna/Graphicsjs pada Codepen.

Buat permainan seni teka -teki dalam kurang daripada 50 baris kod

Di bahagian seterusnya artikel ini, saya ingin menunjukkan kepada anda cara membuat permainan seperti cookie clicker menggunakan GraphicsJS 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

kita mula -mula membuat pentas (seperti yang dinyatakan sebelum ini) dan kemudian mengisytiharkan beberapa pembolehubah awal:

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);
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

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

Selepas melakukan ini, kita dapat memastikan bahawa mereka tidak menulis semula teks tidak kira berapa banyak daun yang kita buat di lapisan.
 // 给图片着色
 // 精美的框架
 frame.stroke(["red", "green", "blue"], 2, "2 2 2");
 // 砖墙
 walls.fill(acgraph.hatchFill('horizontalbrick'));
 // 草屋顶
 roof.fill("#e4d96f");
 // 格子呢裙
 kilt.fill(acgraph.hatchFill('plaid'));
Salin selepas log masuk
Salin selepas log masuk

Convert

Seterusnya, mari tambahkan fungsi untuk menarik daun kita. Ini menggunakan API Transformasi GraphicsJS yang mudah, yang membolehkan anda bergerak, skala, berputar, dan memotong unsur -unsur dan kumpulan elemen. Ini adalah alat yang sangat kuat apabila digabungkan dengan lapisan dan DOM maya.

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);
Salin selepas log masuk

Peristiwa Pemprosesan

Sebarang objek, peringkat, dan lapisan dalam GraphicsJs boleh mengendalikan peristiwa. Senarai lengkap acara yang disokong boleh didapati di API EventType. Terdapat empat acara khas di pentas untuk mengawal rendering.

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>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

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);
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

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.

Pengoptimuman Prestasi

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);
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

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'));
Salin selepas log masuk
Salin selepas log masuk

Hasil Akhir

Lihat Street Cleaner/Graphicsjs pada Codepen.

Kesimpulan

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.

pautan untuk bacaan selanjutnya

  • Maklumat Umum
    • svg
    • kanvas
    • SVG vs Canvas
  • perpustakaan
    • Graphicsjs
    • raphaël
    • snap.svg
    • bonsaijs
  • Graphicsjs
    • Graphicsjs pada GitHub
    • Dokumentasi GraphicsJS
    • GraphicsJS API Rujukan

soalan yang sering ditanya mengenai graphicsjs

Bagaimana grafik berbeza dari perpustakaan grafik javascript lain?

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.

Bagaimana untuk memulakan dengan Graphicsjs?

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.

Bolehkah saya membuat animasi kompleks menggunakan Graphicsjs?

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.

Adakah GraphicsJS serasi dengan semua penyemak imbas?

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.

Bagaimana untuk membuat kecerunan menggunakan Graphicsjs?

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.

Bolehkah saya membuat grafik interaktif menggunakan Graphicsjs?

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.

Adakah lapisan sokongan GraphicsJS?

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.

Bagaimana untuk mengoptimumkan grafik saya menggunakan Graphicsjs?

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.

Bolehkah saya membuat carta dan grafik menggunakan Graphicsjs?

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.

Adakah Graphicsjs percuma untuk digunakan?

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan