Rumah hujung hadapan web Tutorial H5 Strategi hebat untuk melukis segi empat tepat menggunakan HTML5 Canvas API_html5 petua tutorial

Strategi hebat untuk melukis segi empat tepat menggunakan HTML5 Canvas API_html5 petua tutorial

May 16, 2016 pm 03:45 PM
canvas html5 segi empat tepat

Gunakan closePath() untuk menutup bentuk
Mula-mula kita melukis segi empat tepat menggunakan kaedah yang paling biasa.

Kod JavaScriptSalin kandungan ke papan keratan
  1.   
  2. "ms">   
  3.   
  4.     "UTF-8">   
  5.        
  6.   
  7.   
  8.   
  9. "zh">   
  10.   
  11.     "UTF-8">   
  12.     绘制矩形   
  13.   
  14.   
  15. "canvas-warp">   
  16.     "kanvas" style="sempadan: 1px pepejal #aaaaa; paparan: sekat; margin: 50px auto ;">   
  17.         你的浏览器居然不支持Canvas?!赶快换一个吧!!   
  18.        
  
  •   
  •   
  •     window.onload = fungsi(){   
  •         var kanvas = document.getElementById("kanvas");   
  •         canvas.width = 800;   
  •         canvas.height = 600;   
  •         var context = canvas.getContext("2d");   
  •   
  •         context.beginPath();   
  •         context.moveTo(150,50);   
  •         context.lineTo(650,50);   
  •         context.lineTo(650,550);   
  •         context.lineTo(150,550);   
  •         context.lineTo(150,50);     //绘制最后一笔使图像闭合   
  •         context.lineWidth = 5;   
  •         context.strokeStyle = "hitam";   
  •         context.stroke();   
  •   
  •     }   
  •   
  •   
  •   
  •   
  •   
  • Hasil jalankan:
    2016321105129852.jpg (850×500)

    Sepintas lalu, tidak ada yang salah dengannya, tetapi kasut kanak-kanak yang mempunyai penglihatan yang baik telah mendapati bahawa terdapat masalah apabila strok terakhir ditutup, mengakibatkan jurang di sudut kiri atas. Keadaan ini disebabkan oleh menetapkan lineWidth. Jika lalai adalah 1 lejang, tidak akan ada masalah. Tetapi semakin besar pukulan dan semakin lebar garisan, semakin jelas jurang ini. Jadi bagaimana untuk mengelakkan situasi ini?
    Tajuk itu telah merosakkannya, gunakan clothPath() untuk menutup bentuk.

    Kod JavaScriptSalin kandungan ke papan keratan
    1. "zh">
    2. "UTF-8">
    3. Lukiskan segi empat tepat
    4. "canvas-warp">
    5. "kanvas"
    6. style="sempadan: 1px pepejal #aaaaa; paparan: blok; jidar: 50px auto ;"
    7. > Penyemak imbas anda tidak menyokong Kanvas? ! Cepat tukar! !
    window.onload =
  • fungsi(){
  • var kanvas = document.getElementById(
  • "kanvas");
  • kanvas.lebar = 800; kanvas.tinggi = 600;
  • var konteks = canvas.getContext("2d"
  • ); context.beginPath(); context.moveTo(150,50);
  • context.lineTo(650,50); context.lineTo(650,550);
  • context.lineTo(150,550); context.lineTo(150,50);
  • //Anda tidak perlu melukis pukulan terakhir context.closePath(); //Gunakan closePath() untuk menutup grafik
  • context.lineWidth = 5;
  • context.strokeStyle = "hitam"
  • ; context.stroke();
  • }
  • Hasil jalankan:
    2016321105204703.jpg (850×500)

    Dalam contoh ini, digabungkan dengan penjelasan dalam pelajaran sebelumnya, kita tahu bahawa apabila melukis laluan, kita perlu membungkus laluan yang dirancang dengan beginPath() dan closePath(). Sudah tentu, anda tidak perlu melukis lejang terakhir, hanya gunakan closePath() secara terus, dan ia akan menutupnya secara automatik untuk anda. (Jadi jika anda tidak mahu melukis bentuk tertutup, anda tidak boleh menggunakan closePath())

    Warnakan segi empat tepat
    Di sini kami akan memperkenalkan kaedah fill() yang sama pentingnya dengan stroke(). Sama seperti strok asal, sebelum mengisi, kita mesti menggunakan atribut fillStyle dahulu untuk memilih warna yang hendak diisi.
    Contohnya, jika kita ingin mewarnakan segi empat tepat di atas kuning, kita boleh menulisnya seperti ini.

    Kod JavaScriptSalin kandungan ke papan keratan
    1.   
    2. "zh">   
    3.   
    4.     "UTF-8">   
    5.     绘制矩形   
    6.   
    7.   
    8. "canvas-warp">   
    9.     "canvas" style="border: 1px solid #aaaaaa; display: block; margin: 50px auto;">   
    10.         你的浏览器居然不支持Canvas?!赶快换一个吧!!   
    11.        
      
  •   
  •   
  •     window.onload = fungsi(){   
  •         var kanvas = document.getElementById("kanvas");   
  •         canvas.width = 800;   
  •         canvas.height = 600;   
  •         var context = canvas.getContext("2d");   
  •   
  •         context.beginPath();   
  •         context.moveTo(150,50);   
  •         context.lineTo(650,50);   
  •         context.lineTo(650,550);   
  •         context.lineTo(150,550);   
  •         context.lineTo(150,50);     //最后一笔可以不画   
  •         context.closePath();        //使用closePath()闭合图形   
  •   
  •         context.fillStyle = "kuning";   //选择油漆桶的颜色   
  •         context.lineWidth = 5;   
  •         context.strokeStyle = "hitam";   
  •   
  •         context.fill();                 //确定填充   
  •         context.stroke();   
  •   
  •     }   
  •   
  •   
  •   
  •   
  •   
  •   
  • Hasil jalankan:
    2016321105516457.jpg (850×500)

    Apa yang perlu diperhatikan di sini ialah amalan pengekodan yang baik. Kerana seperti yang dinyatakan sebelum ini, Kanvas ialah lukisan berasaskan negeri, dan lukisan ditentukan hanya apabila stroke() dan fill() dipanggil. Jadi kita akan meletakkan dua baris kod ini pada penghujungnya, dan selebihnya kod tetapan keadaan di hadapannya, untuk memisahkan tetapan keadaan daripada kod yang menentukan cabutan. Tingkatkan kebolehbacaan kod.


    Kaedah lukisan berkapsul
    Anda pasti telah mendapati bahawa lukisan segi empat tepat sebenarnya melibatkan empat pukulan seperti ini Setiap kali kita menggunakan kaedah bodoh ini untuk melukis segi empat tepat, kita perlu melukis ini empat pukulan berapa banyak masalah jika kita perlu menghabiskan 10 segi empat tepat? 100? 1,000? Jika ditulis seperti ini, kod akan menjadi kembung dan kebolehgunaan semula akan menjadi sangat rendah. Di sini, kita boleh menggunakan JavaScript untuk merangkum kaedah ini. Kita tahu bahawa segi empat tepat boleh ditentukan secara unik oleh koordinat sudut kiri atasnya serta panjang dan lebarnya.
    Fungsi JavaScript
    Di sini kami memperkenalkan fungsi JavaScript. Jika anda mempunyai pengetahuan asas, anda boleh melangkau bahagian ini dan pergi terus ke bahagian berikut.
    Panggilan pengisytiharan fungsi bahasa JavaScript dan ActionScript adalah yang paling mudah antara bahasa pengaturcaraan.
    Peranan fungsi
    Peranan fungsi adalah untuk menulis kod sekali dan kemudian menggunakan semula kod ini berulang kali. Sebagai contoh: kami ingin melengkapkan fungsi berbilang set jumlah.

    Kod JavaScriptSalin kandungan ke papan keratan
    1. var jumlah; jumlah = 3 2;
    2. makluman(jumlah);
    3. jumlah=7 8 ;
    4. makluman(jumlah);
    5. .... 
    6. //Ulang dua baris kod  
    7. Jika anda ingin melaksanakan jumlah 8 kumpulan nombor, anda memerlukan 16 baris kod Semakin banyak anda melaksanakan, semakin banyak baris kod yang anda perlukan. Oleh itu, kita boleh meletakkan blok kod yang melaksanakan fungsi tertentu ke dalam fungsi dan memanggil fungsi ini secara langsung, menjimatkan masalah berulang kali memasukkan sejumlah besar kod. Gunakan fungsi untuk melengkapkan:
    8. Kod JavaScript
    Salin kandungan ke papan keratan



    fungsi
    tambah2(a,b){
    jumlah = a b;
    1. makluman(jumlah); } // Anda hanya perlu menulis sekali sahaja
    2. tambah2(3,2);
    3. tambah2(7,8); .... //Panggil sahaja fungsi  
    4. Tentukan fungsiBagaimana untuk menentukan fungsi? Sila lihat format di bawah:
    5. Kod JavaScriptSalin kandungan ke papan keratan
    6. fungsi
    Nama fungsi ( )



    {
    Badan berfungsi;
    }
    1. fungsi ialah kata kunci yang mentakrifkan fungsi, "nama fungsi" ialah nama yang anda berikan fungsi itu dan "badan fungsi" digantikan dengan kod yang melengkapkan fungsi tertentu. Panggilan fungsiSelepas fungsi ditakrifkan, ia tidak boleh dilaksanakan secara automatik Anda perlu memanggilnya dan menulis nama fungsi terus dalam kedudukan yang diperlukan. Secara umumnya terdapat dua cara:
    2. Kes 1: Dipanggil dalam teg
    3. Kod JavaScriptSalin kandungan ke papan keratan
      1. fungsi tcon()
      2. {
      3. makluman("Tahniah kerana belajar memanggil fungsi!");
      4. }
      5. tcon(); //Panggil fungsi dan tulis nama fungsi secara terus.
      Kes kedua: Dipanggil dalam fail HTML, seperti memanggil fungsi yang ditentukan selepas mengklik butang.

    Keadaan ini akan digunakan kemudian.

    Fungsi

    dengan parameter mempunyai format berikut:


    Kod JavaScript
    Salin kandungan ke papan keratan
    1. fungsi Nama fungsi (parameter 1, parameter 2)
    2. {
    3. Kod fungsi
    4. }
    Nota: Terdapat berbilang parameter, tambah atau kurangkan bilangan parameter mengikut keperluan. Parameter dipisahkan dengan (koma,).
    Mengikut format ini, fungsi untuk melaksanakan hasil tambah mana-mana dua nombor hendaklah ditulis sebagai:



    Kod JavaScript
    Salin kandungan ke papan keratan
    1. fungsi tambah2(x,y)
    2. {
    3. jumlah = x y;
    4. document.write(sum);
    5. }
    6. x dan y ialah dua parameter fungsi apabila memanggil fungsi, kita boleh menghantar dua tambahan sebenar kepada fungsi melalui dua parameter ini. Sebagai contoh, tambah2(3,4) akan mencari hasil tambah 3 4, dan tambah2(60,20) akan mencari hasil tambah 60 dan 20.
    7. Fungsi nilai pulangan


    Kod JavaScript

    Salin kandungan ke papan keratan

    fungsi
    tambah2(x,y)
    1. {
    2. jumlah = x y;
    3. pulangan
    4. jumlah;
    5. //Pulangan nilai fungsi, nilai selepas pulangan dipanggil nilai pulangan.
    6. }
    7. Pemulangan di sini adalah sama seperti dalam bahasa lain, tetapi dalam bahasa yang ditaip lemah seperti JS atau AS, jenis nilai pulangan tidak perlu ditulis dalam pengisytiharan fungsi.
    8. Pada ketika ini, kami juga telah membincangkan secara sistematik tentang fungsi JavaScript. Mari kita kembali ke topik~Kita juga boleh merangkum segi empat tepat kita, kodnya adalah seperti berikut:

    Kod JavaScript

    Salin kandungan ke papan keratan

    1.   
    2. "zh">   
    3.   
    4.     "UTF-8">   
    5.     封装绘制矩形方法   
    6.   
    7.   
    8. "canvas-warp">   
    9.     "canvas" style="border: 1px solid #aaaaaa; display: block; margin: 50px auto;">   
    10.         你的浏览器居然不支持Canvas?!赶快换一个吧!!   
    11.        
      
  •   
  •   
  •     window.onload = fungsi(){   
  •         var kanvas = document.getElementById("kanvas");   
  •         canvas.width = 800;   
  •         canvas.height = 600;   
  •         var context = canvas.getContext("2d");   
  •   
  •         drawRect(konteks, 150, 50, 50, 50, "merah", 5, "biru");   
  •         drawRect(konteks, 250, 50, 50, 50, "hijau", 5, "merah");   
  •         drawRect(konteks, 350, 50, 50, 50, "kuning", 5, "hitam");   
  •     }   
  •   
  •     fungsi drawRect(cxt, x, y, lebar, tinggi, fillColor, borderWidth, borderColor){   
  •         cxt.beginPath();   
  •         cxt.moveTo(x, y);   
  •         cxt.lineTo(x   lebar, y);   
  •         cxt.lineTo(x   lebar, y   tinggi);   
  •         cxt.lineTo(x, y   tinggi);   
  •         cxt.lineTo(x, y);   
  •         cxt.closePath();   
  •   
  •         cxt.lineWidth = borderWidth;   
  •         cxt.strokeStyle = borderColor;   
  •         cxt.fillStyle = fillColor;   
  •   
  •         cxt.fill();   
  •         cxt.stroke();   
  •     }   
  •   
  •   
  •   
  •   
  •   
  • 运行结果:
    2016321105735875.jpg (850×500)

    使用rect()方法绘制矩形
    犹豫绘制矩形是常用的方法,所以在到以在台们在Canvas好了一个绘制矩形的方法——rect()。这个方法接收4个参数x, y, lebar, tinggi,实际调用时也就是

    Kod JavaScript复制内容到剪贴板
    1. context.rect(x,y,width,height);

    Berdasarkan perkara ini, mari mengoptimumkan kaedah enkapsulasi sebentar tadi.

    Kod JavaScriptSalin kandungan ke papan keratan
    1. fungsi drawRect(cxt, x, y, lebar, tinggi, isiColor, borderWidth, borderColor){
    2. cxt.beginPath();
    3. cxt.rect(x, y, lebar, tinggi);
    4. //cxt.closePath(); Anda tidak memerlukan closePath()
    5. cxt.lineWidth = borderWidth;
    6. cxt.strokeStyle = borderColor;
    7. cxt.fillStyle = fillColor;
    8. cxt.fill();
    9. cxt.stroke();
    10. }
    11. Panggil kaedah enkapsulasi dan lukis imej ajaibBuat imej ajaib~
    Baiklah, mari kita gunakannya untuk melakukan pembedahan, berlatih tangan, dan menggerakkan otot dan tulang mengikut cara kita membungkusnya.



    Kod JavaScript2016321105759647.jpg (500×375)

    Salin kandungan ke papan keratan


    1.   
    2. "zh">   
    3.   
    4.     "UTF-8">   
    5.     绘制魔性图形   
    6.   
    7.   
    8. "canvas-warp">   
    9.     "canvas" style="border: 1px solid #aaaaaa; display: block; margin: 50px auto;">   
    10.         你的浏览器居然不支持Canvas?!赶快换一个吧!!   
    11.        
      
  •   
  •   
  •     window.onload = fungsi(){   
  •         var kanvas = document.getElementById("kanvas");   
  •         canvas.width = 800;   
  •         canvas.height = 600;   
  •         var context = canvas.getContext("2d");   
  •   
  •         context.beginPath();   
  •         context.rect(0, 0, 800, 600);   
  •         context.fillStyle = "#AA9033";   
  •   
  •         context.fill();   
  •   
  •         context.beginPath();   
  •         untuk(var i=0; i<=20; i ){   
  •             drawWhiteRect(konteks, 200   10 * i, 100   10 * i, 400 - 20 * i, 400 - 20 * i);   
  •             drawBlackRect(konteks, 205   10 * i, 105   10 * i, 390 - 20 * i, 390 - 20 * i);   
  •         }   
  •   
  •         context.beginPath();   
  •         context.rect(395, 295, 5, 5);   
  •         context.fillStyle = "hitam";   
  •         context.lineWidth = 5;   
  •   
  •         context.fill();   
  •         context.stroke();   
  •     }   
  •   
  •     fungsi drawBlackRect(cxt, x, y, lebar, tinggi){   
  •         cxt.beginPath();   
  •         cxt.rect(x, y, lebar, tinggi);   
  •   
  •         cxt.lineWidth = 5;   
  •         cxt.strokeStyle = "hitam";   
  •   
  •         cxt.stroke();   
  •     }
  • fungsi drawWhiteRect(cxt, x, y, lebar, tinggi){
  • cxt.beginPath();
  • cxt.rect(x, y, lebar, tinggi);
  • cxt.lineWidth = 5;
  • cxt.strokeStyle =
  • "putih"
  • ;
  • cxt.stroke();
  • }
  • Hasil jalankan:
  • Bukankah ia sangat ajaib? Bukankah ia sangat keren? Saya tidak akan meluangkan masa untuk menerangkan kod ini Anda boleh memikirkannya selepas kelas, atau anda boleh cuba menggunakan pengetahuan yang telah anda pelajari untuk melukis imej yang menarik. Pelajaran ini mempunyai banyak kandungan Malah, ia hanya memperkenalkan empat sifat dan kaedah - closePath(), fillStyle, fill(), rect(), dan penjelasan fungsi JavaScript lanjutan.
  • Kanvas mencapai kesan sudut bulat bergambar
  • Peraturan ini digunakan pada grafik biasa atau tidak teratur yang dilukis oleh pelbagai Kanvas. Kunci untuk mencapai sudut bulat dalam Kanvas ialah menggunakan "isi tekstur".
  • Terdapat kaedah yang dipanggil createPattern in Canvas, yang boleh menukar elemen gambar dengan saiz yang diketahui kepada objek tekstur untuk diisi.
    Sebagai contoh, jika anda melaksanakan kesan pekeliling gambar bernama test.jpg dengan saiz 100px * 100px, kod JS utama adalah seperti berikut:


    2016321105841741.jpg (850×500)

    Kod JavaScript

    Salin kandungan ke papan keratan


    // elemen kanvas, elemen gambar

    var
    kanvas = document.querySelector(
      "#canvas"
    1. ), imej = baharu Imej();
    2. var konteks = canvas.getContext("2d");
    3. image.onload =
    4. fungsi() { // Cipta tekstur imej
    5.  
    6. var corak = context.createPattern(imej, "tiada ulangan"
    7. ); 
    8. //Lukis bulatan
    9. context.arc(50, 50, 50, 0, 2 * Math.PI // Isi bulatan yang dilukis
    10. context.fillStyle = corak; context.fill();
    11. };
    12. image.src = "test.jpg";
    13. Cukup jadikan nilai atribut fillStyle bagi konteks Kanvas sama dengan objek tekstur ini.

      API lukisan segi empat tepat yang disertakan dengan Kanvas tidak mempunyai atribut sudut bulat Oleh itu, segi empat tepat bulat dalam demo menggunakan kaedah tersuai. Saya melihat dengan pantas dan mendapati ia agak sukar untuk mencapai saiz fillet yang berbeza dalam arah menegak dan mendatar Untuk tujuan demonstrasi, saya tidak pergi terlalu jauh, jadi fillet dalam demo adalah simetri.
      2016321105911393.png (319×314)

    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

    Alat AI Hot

    Undresser.AI Undress

    Undresser.AI Undress

    Apl berkuasa AI untuk mencipta foto bogel yang realistik

    AI Clothes Remover

    AI Clothes Remover

    Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

    Undress AI Tool

    Undress AI Tool

    Gambar buka pakaian secara percuma

    Clothoff.io

    Clothoff.io

    Penyingkiran pakaian AI

    Video Face Swap

    Video Face Swap

    Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

    Alat panas

    Notepad++7.3.1

    Notepad++7.3.1

    Editor kod yang mudah digunakan dan percuma

    SublimeText3 versi Cina

    SublimeText3 versi Cina

    Versi Cina, sangat mudah digunakan

    Hantar Studio 13.0.1

    Hantar Studio 13.0.1

    Persekitaran pembangunan bersepadu PHP yang berkuasa

    Dreamweaver CS6

    Dreamweaver CS6

    Alat pembangunan web visual

    SublimeText3 versi Mac

    SublimeText3 versi Mac

    Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

    Sempadan Jadual dalam HTML Sempadan Jadual dalam HTML Sep 04, 2024 pm 04:49 PM

    Panduan untuk Sempadan Jadual dalam HTML. Di sini kita membincangkan pelbagai cara untuk menentukan sempadan jadual dengan contoh Sempadan Jadual dalam HTML.

    Jadual Bersarang dalam HTML Jadual Bersarang dalam HTML Sep 04, 2024 pm 04:49 PM

    Ini ialah panduan untuk Nested Table dalam HTML. Di sini kita membincangkan cara membuat jadual dalam jadual bersama-sama dengan contoh masing-masing.

    HTML jidar-kiri HTML jidar-kiri Sep 04, 2024 pm 04:48 PM

    Panduan untuk HTML margin-kiri. Di sini kita membincangkan gambaran keseluruhan ringkas tentang HTML margin-left dan Contoh-contohnya bersama-sama dengan Pelaksanaan Kodnya.

    Susun Atur Jadual HTML Susun Atur Jadual HTML Sep 04, 2024 pm 04:54 PM

    Panduan untuk Susun Atur Jadual HTML. Di sini kita membincangkan Nilai Susun Atur Jadual HTML bersama-sama dengan contoh dan output n perincian.

    Pemegang Tempat Input HTML Pemegang Tempat Input HTML Sep 04, 2024 pm 04:54 PM

    Panduan untuk Pemegang Tempat Input HTML. Di sini kita membincangkan Contoh Pemegang Tempat Input HTML bersama-sama dengan kod dan output.

    Memindahkan Teks dalam HTML Memindahkan Teks dalam HTML Sep 04, 2024 pm 04:45 PM

    Panduan untuk Memindahkan Teks dalam HTML. Di sini kita membincangkan pengenalan, cara teg marquee berfungsi dengan sintaks dan contoh untuk dilaksanakan.

    Senarai Tertib HTML Senarai Tertib HTML Sep 04, 2024 pm 04:43 PM

    Panduan kepada Senarai Tertib HTML. Di sini kami juga membincangkan pengenalan senarai dan jenis Tertib HTML bersama-sama dengan contoh mereka masing-masing

    Butang onclick HTML Butang onclick HTML Sep 04, 2024 pm 04:49 PM

    Panduan untuk Butang onclick HTML. Di sini kita membincangkan pengenalan, kerja, contoh dan onclick Event masing-masing dalam pelbagai acara.

    See all articles