Canvas入门(1):绘制矩形、圆、直线、曲线等基本图形_html/css_WEB-ITnose

WBOY
Freigeben: 2016-06-24 11:56:30
Original
1071 Leute haben es durchsucht

来源:http://www.ido321.com/968.html

一、Canvas的基础知识

Canvas是HTML 5中新增的元素,专门用于绘制图形。canvas元素就相当于一块“画布”,一块无色的透明区域,需要利用JavaScript编写在其中进行绘画的脚本。

在页面放置canvas元素很简单,利用标签,同时指定几个基本的属性:id,width和height。接下来通过几个小案例,跟我入门canvas吧~~~^_^~~~

二、Canvas小案例(测试结果来自Google最新版本)

1、绘制矩形

canvas.html:

   1: <!DOCTYPE >
Nach dem Login kopieren
   2: <html>
Nach dem Login kopieren
   3: <head>
Nach dem Login kopieren
   4: <meta charset="utf-8">
Nach dem Login kopieren
   5: <title>canvas元素学习</title>
Nach dem Login kopieren
   6: <script type="text/javascript" src="canvas.js">
Nach dem Login kopieren
   7: </script>
Nach dem Login kopieren
   8: </head>
Nach dem Login kopieren
   9: <body>
Nach dem Login kopieren
  10:     <h3>canvas元素学习</h3>
Nach dem Login kopieren
  11:     <canvas id="canvas" width="400" height="300"></canvas>
Nach dem Login kopieren
  12: </body>
Nach dem Login kopieren
  13: </html>
Nach dem Login kopieren

canvas.js:

   1: window.onload=function()
Nach dem Login kopieren
   2: {
Nach dem Login kopieren
   3:     // 获取canvas 的ID
Nach dem Login kopieren
   4:     var canvas = document.getElementById('canvas');
Nach dem Login kopieren
   5:     if (canvas == null)
Nach dem Login kopieren
   6:     {
Nach dem Login kopieren
   7:         return false;
Nach dem Login kopieren
   8:     }
Nach dem Login kopieren
   9:     // 获取上下文
Nach dem Login kopieren
  10:     var context = canvas.getContext('2d');
Nach dem Login kopieren
  11:     // 设置填充的样式
Nach dem Login kopieren
  12:     context.fillStyle = "#eeeeff";
Nach dem Login kopieren

13: // 绘制矩形,以fillStyle填充,fillRect(strokeRect)前两个参数是矩形左上角位置,后两个参数分别是宽和高

//默认原点是canvas的左上角

  14:     context.fillRect(0,0,400,300);
Nach dem Login kopieren
  15:     context.fillStyle = 'red';
Nach dem Login kopieren
  16:     // 设置边框的样式
Nach dem Login kopieren
  17:     context.strokeStyle = 'blue';
Nach dem Login kopieren
  18:     // 设置边框大小
Nach dem Login kopieren
  19:     context.lineWidth = 2;
Nach dem Login kopieren
  20:     context.fillRect(50,50,100,100);
Nach dem Login kopieren
  21:     // 绘制矩形边框
Nach dem Login kopieren
  22:     context.strokeRect(50,50,100,100);
Nach dem Login kopieren
  23: }
Nach dem Login kopieren

效果:

2、绘制圆形:使用路径绘制

   1: // 获取canvas 的ID
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   2:     var canvas = document.getElementById('canvas');
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   3:     if (canvas == null)
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   4:     {
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   5:         return false;
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   6:     }
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   7:     // 获取上下文
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   8:     var context = canvas.getContext('2d');
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   9:     // 设置填充的样式
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
  10:     context.fillStyle = "#eeeeff";
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
  11:     // 绘制矩形,以fillStyle填充
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
  12:     context.fillRect(0,0,400,300);
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
  13:     for(var i = 0; i<9; i++)
Nach dem Login kopieren
  14:     {
Nach dem Login kopieren
  15:         // 创建路径
Nach dem Login kopieren
  16:         context.beginPath();
Nach dem Login kopieren
  17:         // 绘制圆形路径
Nach dem Login kopieren
  18:         context.arc(i*25, i*25, i*10, 0, Math.PI * 2, true);
Nach dem Login kopieren
  19:         // 关闭路径,如果不关闭,则图像会重叠
Nach dem Login kopieren
  20:         context.closePath();
Nach dem Login kopieren
  21:         context.fillStyle = 'rgba(255,0,0,0.25)';
Nach dem Login kopieren
  22:         // 以fillStyle填充
Nach dem Login kopieren
  23:         context.fill();
Nach dem Login kopieren
  24:     }
Nach dem Login kopieren

arc()绘制圆弧,其参数如下

arc(x,y,radius,startAngle,endAngle,anticlockwise):x,y 是圆弧的圆心位置,radius是半径,startAngle和endAngle是起始和结束的角度,单位是弧度(度数必须转为弧 度),anticlockwise是一个布尔值,true表示顺时针绘制图像,false表示逆时针绘制。起始角度是0,结束角度是360(PI*2)就 可以绘制圆形。

效果:

3、绘制直线

绘制直线用到moveTo()和lineTo()两个方法

   1: // 获取canvas 的ID
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   2:     var canvas = document.getElementById('canvas');
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   3:     if (canvas == null)
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   4:     {
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   5:         return false;
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   6:     }
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   7:     // 获取上下文
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   8:     var context = canvas.getContext('2d');
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   9:     // 设置填充的样式
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
  10:     context.fillStyle = "#eeeeff";
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
  11:     // 绘制矩形,以fillStyle填充
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
  12:     context.fillRect(0,0,400,300);
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

13: context.beginPath();

//参数线的起点坐标

14: context.moveTo(50,50);

//参数线的终点坐标

  15:     context.lineTo(100,100);
Nach dem Login kopieren

16: context.closePath();

//关闭路径之后绘制图形

  17:     context.strokeStyle = 'red';
Nach dem Login kopieren
  18:     context.stroke();
Nach dem Login kopieren

效果:

绘制一个复杂点的

   1: // 获取canvas 的ID
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   2:     var canvas = document.getElementById('canvas');
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   3:     if (canvas == null)
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   4:     {
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   5:         return false;
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   6:     }
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   7:     // 获取上下文
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   8:     var context = canvas.getContext('2d');
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   9:     // 设置填充的样式
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
  10:     context.fillStyle = "#eeeeff";
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
  11:     // 绘制矩形,以fillStyle填充
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
  12:     context.fillRect(0,0,400,300);
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
  13:     var dx = 150;
Nach dem Login kopieren
Nach dem Login kopieren
  14:     var dy = 150;
Nach dem Login kopieren
Nach dem Login kopieren
  15:     var s  = 100;
Nach dem Login kopieren
Nach dem Login kopieren
  16:      // 创建路径
Nach dem Login kopieren
Nach dem Login kopieren
  17:      context.beginPath();
Nach dem Login kopieren
Nach dem Login kopieren
  18:      context.fillStyle = 'rgb(100,255,100)';
Nach dem Login kopieren
Nach dem Login kopieren
  19:      context.strokeStyle = 'rgb(0,0100)';
Nach dem Login kopieren
Nach dem Login kopieren
  20:      var x = Math.sin(0);
Nach dem Login kopieren
Nach dem Login kopieren
  21:      var y = Math.cos(0);
Nach dem Login kopieren
Nach dem Login kopieren
  22:      var dig = Math.PI/15 *11;
Nach dem Login kopieren
Nach dem Login kopieren
  23:      for (var i = 0; i < 30; i++) {
Nach dem Login kopieren
  24:          var x = Math.sin(i * dig);
Nach dem Login kopieren
  25:          var y = Math.cos(i * dig);
Nach dem Login kopieren
  26:          context.lineTo(dx+x*s,dx+y*s);
Nach dem Login kopieren
  27:      }
Nach dem Login kopieren
  28:      context.closePath();
Nach dem Login kopieren
  29:      context.fill();
Nach dem Login kopieren
  30:      context.stroke();
Nach dem Login kopieren

效果:

4、绘制曲线:利用bezierCurveTo绘制贝济埃曲线

bezierCurveTo可以绘制曲线,是lineTo的曲线版本

   1: // 获取canvas 的ID
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   2:     var canvas = document.getElementById('canvas');
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   3:     if (canvas == null)
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   4:     {
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   5:         return false;
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   6:     }
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   7:     // 获取上下文
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   8:     var context = canvas.getContext('2d');
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
   9:     // 设置填充的样式
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
  10:     context.fillStyle = "#eeeeff";
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
  11:     // 绘制矩形,以fillStyle填充
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
  12:     context.fillRect(0,0,400,300);
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
  13:     var dx = 150;
Nach dem Login kopieren
Nach dem Login kopieren
  14:     var dy = 150;
Nach dem Login kopieren
Nach dem Login kopieren
  15:     var s  = 100;
Nach dem Login kopieren
Nach dem Login kopieren
  16:      // 创建路径
Nach dem Login kopieren
Nach dem Login kopieren
  17:      context.beginPath();
Nach dem Login kopieren
Nach dem Login kopieren
  18:      context.fillStyle = 'rgb(100,255,100)';
Nach dem Login kopieren
Nach dem Login kopieren
  19:      context.strokeStyle = 'rgb(0,0100)';
Nach dem Login kopieren
Nach dem Login kopieren
  20:      var x = Math.sin(0);
Nach dem Login kopieren
Nach dem Login kopieren
  21:      var y = Math.cos(0);
Nach dem Login kopieren
Nach dem Login kopieren
  22:      var dig = Math.PI/15 *11;
Nach dem Login kopieren
Nach dem Login kopieren
  23:      context.moveTo(dx,dy);
Nach dem Login kopieren
  24:      for (var i = 0; i < 30; i++) {
Nach dem Login kopieren
  25:          var x = Math.sin(i * dig);
Nach dem Login kopieren
  26:          var y = Math.cos(i * dig);
Nach dem Login kopieren
  27:          context.bezierCurveTo(dx+x*s,dy+y*s-100,dx+x*s+100,dy+y*s,dx+x*s,dy+y*s);
Nach dem Login kopieren
  28:      }
Nach dem Login kopieren
  29:      context.closePath();
Nach dem Login kopieren
  30:      context.fill();
Nach dem Login kopieren
  31:      context.stroke();
Nach dem Login kopieren

效果


 

下一篇:Canvas入门(2):图形渐变和图像形变换

 

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage