Rumah > hujung hadapan web > Tutorial H5 > Berkongsi contoh penggunaan HTML5 Canvas untuk mencipta animasi papan kekunci dan tetikus_html5 kemahiran tutorial

Berkongsi contoh penggunaan HTML5 Canvas untuk mencipta animasi papan kekunci dan tetikus_html5 kemahiran tutorial

WBOY
Lepaskan: 2016-05-16 15:45:44
asal
2351 orang telah melayarinya

Papan kekunci mengawal pergerakan bola

Seperti yang kita semua tahu, animasi yang kita lihat sebenarnya adalah satu siri penukaran pantas imej statik, yang memberikan mata kasar kesan visual "imej bergerak" disebabkan imej selepas visual. Selepas memahami perkara ini, melukis kesan animasi pada kanvas menjadi agak mudah. Kita hanya perlu mengosongkan grafik statik tertentu dahulu, dan kemudian lukis semula di lokasi lain Ulangi ini untuk membuat grafik statik bergerak mengikut trajektori tertentu untuk menghasilkan kesan animasi.

Seterusnya, kami melukis bola padu pada kanvas, dan kemudian menggunakan kekunci anak panah pada papan kekunci untuk mengawal pergerakan bola untuk menghasilkan kesan dinamik. Kod sampel adalah seperti berikut:

Kod JavaScriptSalin kandungan ke papan keratan
  1. "UTF-8"
  2. > html5 contoh kemasukan bola boleh alih lukisan kanvas
  3. "moveBall(acara)"
  4. >
  5. "myCanvas"
  6. lebar=
  7. "400px"
  8. tinggi=
  9. "300px"
  10. style="sempadan: 1px merah pepejal;"> Pelayar anda tidak menyokong teg kanvas.
  11. "teks/javascript"> //Dapatkan objek Kanvas (kanvas)
  12. var
  13. kanvas = document.getElementById("myCanvas");
  14. //Mewakili kelas sfera
  15. fungsi
  16. Bola(x, y ,jejari, kelajuan){
  17. ini
  18. .x = x || 10; 🎜>
  19. ini.y = y || 10; 🎜>
  20. ini.jejari = radius || 10; > ini
  21. .kelajuan = kelajuan || 5; 🎜>
  22.   //Naik
  23. ini.moveUp = fungsi
  24. (){
  25. ini.y -= ini
  26. .kelajuan
  27.  jika(ini
  28. .y < .radius){
  29. //Cegah melebihi sempadan atas
  30.                                                                                                                                                                                                                
  31.                                                                };   //Bergerak ke kanan
  32. ini
  33. .moveRight =
  34. fungsi(){ ini
  35. .x =
  36. ini
  37. .kelajuan;
  38. var
  39. maxX = canvas.width -
  40. ini
  41. .jejari
  42. jika
  43. (ini.x > maxX){  //Cegah melebihi sempadan yang betul
  44.  ini.x = maxX; 
  45. }
  46. };
  47.  
  48. //Bergerak ke kiri
  49. ini.moveLeft = fungsi(){
  50. ini.x -= ini.kelajuan
  51.  jika(ini.x < .radius){
  52. //Cegah melebihi sempadan kiri
  53.  
  54. ini
  55. .x = ini.jejari;                                                                
  56. };
  57.  
  58. //Bergerak ke bawah
  59. ini
  60. .moveDown =
  61. fungsi(){ ini
  62. .y =
  63. ini.laju var
  64. maxY = canvas.height -
  65. ini.jejari jika
  66. (
  67. ini.y > maxY){ //Cegah melebihi sempadan bawah
  68. ini
  69. .y = maxY;
  70.                                                                };
  71. }
  72. //Lukis bola
  73. fungsi drawBola(bola){
  74.  jika(
  75. jenis
  76. ctx != "tidak ditentukan"){ ctx.beginPath(); ctx.arc(ball.x, ball.y, ball.radius, 0, Math.PI * 2,
  77. false
  78. ctx.fill(); }
  79. }
  80. //Kosongkan kanvas
  81. fungsi clearCanvas(){
  82.  jika(jenis ctx != "tidak ditentukan"){
  83. ctx.clearRect(0, 0, 400, 300);
  84. }
  85. }
  86. var bola = baharu Bola();
  87. //Cukup mengesan sama ada penyemak imbas semasa menyokong objek Canvas untuk mengelakkan ralat sintaks dalam sesetengah penyemak imbas yang tidak menyokong html5
  88. jika
  89. (canvas.getContext){ 
  90. //Dapatkan objek CanvasRenderingContext2D (berus) yang sepadan
  91. var
  92. ctx = canvas.getContext("2d"); drawBola(bola);
  93. }
  94. //Fungsi pengendali panggilan balik untuk acara onkeydown
  95. //Kawal pergerakan bola mengikut kekunci pengguna
  96. fungsi moveBall(acara){
  97. tukar(event.keyCode){
  98.  kes 37: //Kekunci anak panah kiri  
  99. bola.moveLeft();
  100. rehat;
  101.  
  102. kes 38: //Kekunci arah atas  
  103. ball.moveUp();
  104. rehat;  
  105. kes
  106. 39: //Kekunci anak panah kanan   bola.moveRight();
  107. rehat
  108. ; kes
  109. 40: 
  110. //Kekunci anak panah ke bawah bola.moveDown();
  111. rehat
  112. ;
  113. lalai: 
  114. //Operasi utama lain tidak bertindak balas
  115. kembali;
  116. }  
  117. clearCanvas();
  118. //Kosongkan kanvas dahulu
  119. drawBall(bola); //Lukis bola terkini
  120. }
  121. Sila gunakan penyemak imbas yang menyokong HTML5 untuk membuka halaman web berikut untuk melihat kesan sebenar (gunakan kekunci anak panah untuk bergerak):
  122. Gunakan kanvas untuk melukis bola boleh alih
  123. .
  124. Clown SmileyAnda hanya perlu memahami beberapa API dan kemudian menggunakan parameter animasi yang diperlukan untuk mencipta animasi web yang menarik ini yang boleh bertindak balas kepada pergerakan anda.
  125. Langkah pertama ialah melukis ciri muka
Badut ini tidak mempunyai telinga dan kening, jadi hanya tinggal tiga organ, tetapi kita perlu menarik dua matanya secara berasingan, jadi ada empat bahagian semuanya. Mari kita lihat kodnya dahulu.

Kod untuk melukis mata kiri

Kod JavaScript
Salin kandungan ke papan keratan

  1. var leftEye = baharu Kinetic.Line({
  2. x: 150,
  3. mata: [0, 200, 50, 190, 100, 200, 50, 210],
  4. ketegangan: 0.5,
  5. ditutup: benar,
  6. strok: 'putih',
  7. lejangLebar: 10
  8. });

Kod untuk melukis mata kanan

Kod JavaScriptSalin kandungan ke papan keratan
  1. var rightEye = baharu Kinetic.Line({
  2. x: sw - 250,
  3. mata: [0, 200, 50, 190, 100, 200, 50, 210],
  4. ketegangan: 0.5,
  5. ditutup: benar,
  6. strok: 'putih',
  7. lejangLebar: 10
  8. });

Kod untuk melukis hidung

Kod JavaScriptSalin kandungan ke papan keratan
  1. var hidung = baharu Kinetic.Line({
  2. mata: [240, 280, sw/2, 300, sw-240,280],
  3. ketegangan: 0.5,
  4. ditutup: benar,
  5. strok: 'putih',
  6. lejangLebar: 10
  7. });

Kod untuk melukis mulut

Kod JavaScriptSalin kandungan ke papan keratan
  1. var mulut = baharu Kinetic.Line({
  2. mata: [150, 340, sw/2, 380, sw - 150, 340, sw/2, sh],
  3. ketegangan: 0.5,
  4. ditutup: benar,
  5. strok: 'merah',
  6. lejangLebar: 10
  7. });

Adakah anda berasa kecewa? Ternyata ia hanya beberapa baris kod. Ya, semudah itu saya percaya anda mula yakin bahawa anda boleh menjadi pengaturcara animasi permainan web

Terangkan secara ringkas kod di atas. Kinetik ialah kit alat js yang kami gunakan. Di kepala halaman, kita perlu merujuknya seperti ini:

Kod JavaScriptSalin kandungan ke papan keratan
  1. var mulut = baharu Kinetic.Line({
  2. mata: [150, 340, sw/2, 380, sw - 150, 340, sw/2, sh],
  3. ketegangan: 0.5,
  4. ditutup: benar,
  5. strok: 'merah',
  6. lejangLebar: 10
  7. });

Yang lain ialah beberapa perkara utama, keanjalan garisan, warna, lebar, dsb. Ini mudah difahami.

Langkah kedua ialah membuat gambar bergerak

Sebab animasi ini menarik ialah ia boleh bertindak balas kepada pergerakan tetikus anda dan berinteraksi dengan pengguna Ini adalah aspek paling kritikal bagi animasi yang berjaya. Jika diperhatikan dengan teliti, perubahan pada raut wajah badut itu hanyalah perubahan bentuk Mata menjadi lebih besar, mulut menjadi lebih besar, dan hidung menjadi lebih besar satu peralihan. Terdapat beberapa algoritma di dalamnya. Ini adalah bahagian yang paling membimbangkan. Mujurlah, teknologi algoritma ini sangat matang dan tidak memerlukan kita memikirkannya Perpustakaan enjin animasi ini telah merangkum teknologi ini ke dalam antara muka yang sangat mudah dan mudah. Mari kita lihat cara untuk menggerakkan sesuatu.

Animasi mata kiri

Kod JavaScriptSalin kandungan ke papan keratan
  1. var leftEyeTween = baharu Kinetik.Tween({
  2. nod: leftEye,
  3. tempoh: 1,
  4. pelonggaran: Kinetic.Easings.ElasticEaseOut,
  5. y: -100,
  6. mata: [0, 200, 50, 150, 100, 200, 50, 200]
  7. });

Animasi mata kanan

Kod JavaScriptSalin kandungan ke papan keratan
  1. var rightEyeTween = baharu Kinetic.Tween({
  2. nod: rightEye,
  3. tempoh: 1,
  4. pelonggaran: Kinetic.Easings.ElasticEaseOut,
  5. y: -100,
  6. mata: [0, 200, 50, 150, 100, 200, 50, 200]
  7. });

Animasi hidung

Kod JavaScriptSalin kandungan ke papan keratan
  1. var noseTween = baharu Kinetik.Tween({
  2. nod: hidung,
  3. tempoh: 1,
  4. pelonggaran: Kinetic.Easings.ElasticEaseOut,
  5. y: -100,
  6. mata: [220, 280, sw/2, 200, sw-220,280]
  7. });

Animasi mulut

Kod JavaScriptSalin kandungan ke papan keratan
  1. var mouthTween = baharu Kinetic.Tween({
  2. nod: mulut,
  3. tempoh: 1,
  4. pelonggaran: Kinetic.Easings.ElasticEaseOut,
  5. mata: [100, 250, sw/2, 250, sw - 100, 250, sw/2, sh-20]
  6. });

Kod ini sangat mudah dan nama pembolehubah adalah jelas. Ia sepatutnya tidak sukar bagi pengaturcara yang mempunyai sedikit pengalaman untuk memahami kod ini. Pada asasnya setiap kod membolehkan anda memberikan beberapa titik untuk menentukan mod pereputan dan tempoh tindakan animasi.

Kod animasi lengkap

Kod JavaScriptSalin kandungan ke papan keratan
  1.   
  2.   
  3.      
  4.        
  5.      
  6.      
  7.     
    "container">
      
  8.     "/js/lib/kinetic-v5.0.1.min.js">   
  9.     "tunda">   
  10.       var sw = 578;   
  11.       var sh = 400;   
  12.       var peringkat = baharu Kinetik.Peringkat({   
  13.         bekas: 'bekas',   
  14.         lebar: 578,   
  15.         tinggi: 400   
  16.       });   
  17.       var lapisan = baharu Kinetik.Lapisan({   
  18.         y: -30    
  19.       });   
  20.   
  21.       var leftEye = baharu Kinetic.Line({   
  22.         x: 150,   
  23.         mata: [0, 200, 50, 190, 100, 200, 50, 210],   
  24.         ketegangan: 0.5,   
  25.         ditutup: benar,   
  26.         strok: 'putih',   
  27.         lebar lejang: 10        
  28.       });   
  29.   
  30.       var rightEye = baharu Kinetic.Line({   
  31.         x: sw - 250,   
  32.         mata: [0, 200, 50, 190, 100, 200, 50, 210],   
  33.         ketegangan: 0.5,   
  34.         ditutup: benar,   
  35.         strok: 'putih',   
  36.         lebar lejang: 10      
  37.       });   
  38.   
  39.       var nose = baharu Kinetic.Line({   
  40.         mata: [240, 280, sw/2, 300, sw-240,280],   
  41.         ketegangan: 0.5,   
  42.         ditutup: benar,   
  43.         strok: 'putih',   
  44.         lebar lejang: 10   
  45.       });   
  46.   
  47.       var mulut = baharu Kinetic.Line({   
  48.         mata: [150, 340, sw/2, 380, sw - 150, 340, sw/2, sh],   
  49.         ketegangan: 0.5,   
  50.         ditutup: benar,   
  51.         strok: 'merah',   
  52.         lebar lejang: 10   
  53.       });   
  54.   
  55.       layer.add(leftEye)   
  56.             .tambah(mata kanan)   
  57.             .tambah(hidung)   
  58.            .tambah(mulut);   
  59.   
  60.       peringkat.tambah(lapisan);   
  61.   
  62.       // remaja   
  63.   
  64.       var leftEyeTween = baharu Kinetic.Tween({   >
  65.         nod: mata kiri,   
  66.         tempoh: 1,   
  67.         pelonggaran: Kinetik.Pelonggaran.ElastikKeluar,   
  68.         y: -100,   
  69.         mata: [0, 200, 50, 150, 100, 200, 50, 200]   
  70.       });    
  71.   
  72.       var rightEyeTween = baharu Kinetic.Tween({   >
  73.         nod: mata kanan,   
  74.         tempoh: 1,   
  75.         pelonggaran: Kinetik.Pelonggaran.ElastikKeluar,   
  76.         y: -100,   
  77.         mata: [0, 200, 50, 150, 100, 200, 50, 200]   
  78.       });   
  79.   
  80.       var noseTween = baharu Kinetic.Tween({   >
  81.         nod: hidung,   
  82.         tempoh: 1,   
  83.         pelonggaran: Kinetik.Pelonggaran.ElastikKeluar,   
  84.         y: -100,   
  85.         mata: [220, 280, sw/2, 200, sw-220,280]   
  86.       });    
  87.   
  88.       
  89. var mouthTween = baharu Kinetic.Tween({   
  90.         nod: mulut,   
  91.         tempoh: 1,   
  92.         pelonggaran: Kinetik.Pelonggaran.ElastikKeluar,   
  93.         mata: [100, 250, sw/2, 250, sw - 100, 250, sw/2, sh-20]   
  94.       });    
  95.   
  96.       stage.getContainer().addEventListener(
  97. 'mouseover'fungsi() {    🎜>         leftEyeTween.play();   
  98.         rightEyeTween.play();   
  99.         noseTween.play();   
  100.         mouthTween.play();   
  101.       });   
  102.   
  103.       stage.getContainer().addEventListener(
  104. 'mouseout'fungsi() {    🎜>         leftEyeTween.reverse();   
  105.         rightEyeTween.reverse();   
  106.         noseTween.reverse();   
  107.         mouthTween.reverse();   
  108.       });   
  109.   
  110.        
  111.      
  112.   
  113. Sehen Sie sich die Demo an

Label berkaitan:
sumber:php.cn
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