h5的画布Canvas

  
  
绘制基本的图形
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <title>canvas</title>
  6. </head>
  7. <body>
  8. <h1>画布</h1>
  9. <canvas id="myCanvas" style="border:1px solid #ff0" width="200" height="100" > Your Browser does not support Canvas, please upgrade</canvas>
  10. <dl>
  11. <dt><h1>绘制图形的步骤</h1></dt>
  12. <dd>
  13. <ol>
  14. <li>第一步,创建一个带id的canvas元素</li>
  15. <li>第二步,通过id获取canvas,document.getElementById(id)</li>
  16. <li>第三步,创建Context对象,创造2D环境</li>
  17. </ol>
  18. <canvas id="myCanvas1" style="border:1px solid #ff0" width="200" height="100">
  19. </canvas>
  20. </dd>
  21. </dl>
  22. <dl>
  23. <dt><h1>绘制直线</h1></dt>
  24. <dd>
  25. <ol>
  26. <li>第一步,使用moveTo定起点</li>
  27. <li>第二步,使用lineTo定终点</li>
  28. <li>第三步,使用stroke花线</li>
  29. </ol>
  30. <canvas id="myCanvas2" style="border:1px solid #ff0" width="200" height="100">
  31. 您的浏览器不支持
  32. </canvas>
  33. </dd>
  34. </dl>
  35. <dl>
  36. <dt><h1>绘制矩形</h1></dt>
  37. <dd>
  38. <ol>
  39. <li>第一种方法,使用fill填充,用到的fillStyle和fillRect</li>
  40. <li>第二种方法,使用stroke绘制轮廓,用到的strokeStyle和strokeRect</li>
  41. </ol>
  42. </dd>
  43. <canvas id="myCanvas3" style="border:1px solid #ff0" width="200" height="100">
  44. 你的浏览器支持,请更新浏览器
  45. </canvas>
  46. </dl>
  47. <dl>
  48. <dt><h1>绘制圆形</h1></dt>
  49. <dd>
  50. <ol>
  51. <li>用到了beginPath(),closePath(),arc(x,y,radius,startAngle,endAngle,是否按顺时针),fill方法</li>
  52. <li>fill是用来填充图形的;stroke是画轮廓</li>
  53. </ol>
  54. <canvas id="myCanvas4" style="border:1px solid #ff0">
  55. </canvas>
  56. </dd>
  57. </dl>
  58. <dl>
  59. <dt><h1>绘制弧形</h1></dt>
  60. <dd>
  61. <ol>
  62. <li>使用的方法就是arc(x,y,radius,startAngle,endAngle,是否按顺时针)</li>
  63. </ol>
  64. </dd>
  65. <canvas id="myCanvas5" style="border:1px solid #ff0">Your Browser does not support Canvas, please upgrade</canvas>
  66. </dl>
  67. <dl>
  68. <dt><h1>绘制三角形</h1></dt>
  69. <dd>
  70. <ol>
  71. <li>fill是填充型;stroke是轮廓型;</li>
  72. </ol>
  73. <canvas id="myCanvas6" style="border:1px solid #ff0">
  74. </canvas>
  75. </dd>
  76. </dl>
  77. <dl>
  78. <dt><h1>清空画布</h1></dt>
  79. <dd>
  80. <ol>
  81. <li>使用clearRect(x,y,w,h)清空指定的画布</li>
  82. </ol>
  83. <canvas id="myCanvas7" style="border:1px solid #ff0">
  84. 可以清空的画布
  85. </canvas>
  86. <button type="button" onclick="clearMap()">清空上面的画布</button>
  87. </dd>
  88. </dl>
  89. <script type="text/javascript">
  90. // 绘制矩形
  91. var c=document.getElementById("myCanvas1");
  92. var context=c.getContext("2d");
  93. context.fillStyle="#ff00ff";
  94. context.fillRect(50, 25, 100, 50);
  95. // 绘制直线
  96. var c1=document.getElementById("myCanvas2");
  97. var context1=c1.getContext("2d");
  98. context1.moveTo(0, 0);
  99. context1.lineTo(200,100);
  100. context1.stroke();
  101. // 绘制矩形--填充
  102. var c2=document.getElementById("myCanvas3");
  103. var context2=c2.getContext("2d");
  104. context2.fillStyle="#ff00ff";
  105. context2.fillRect(0, 0, 200, 100);
  106. //绘制矩形-轮廓
  107. context2.strokeStyle="#fff";
  108. context2.strokeRect(0,0,100,50);
  109. // 绘制圆形--填充
  110. var c3=document.getElementById("myCanvas4");
  111. var context3=c3.getContext("2d");
  112. context3.fillStyle="#ff00ff";
  113. context3.beginPath();
  114. context3.arc(100, 75, 50, 0, Math.PI*2, true);
  115. context3.closePath();
  116. context3.fill();
  117. // 绘制圆形--轮廓
  118. context3.strokeStyle="#ff0";
  119. context3.beginPath();
  120. context3.arc(100, 75, 30,0,Math.PI*2, true);
  121. context3.stroke();
  122. // 绘制弧线
  123. var c5=document.getElementById("myCanvas5");
  124. var context5=c5.getContext("2d");
  125. for (var i = 0; i<5; i++) {
  126. context5.strokeStyle="#ff00ff";
  127. context5.beginPath();
  128. context5.arc(0, 150, i*10, 0, Math.PI*3/2, true);
  129. context5.stroke();
  130. }
  131. // 绘制三角形--填充型
  132. var c6 = document.getElementById("myCanvas6");
  133. var context6=c6.getContext("2d");
  134. context6.fillStyle="#ff00ff";
  135. context6.beginPath();
  136. context6.moveTo(25, 25);
  137. context6.lineTo(150,25);
  138. context6.lineTo(25,150);
  139. context6.closePath();
  140. context6.fill();
  141. // 绘制三角形-轮廓型
  142. context6.strokeStyle="#ff0";
  143. context6.beginPath();
  144. context6.moveTo(30, 30);
  145. context6.lineTo(120,30);
  146. context6.lineTo(30,120);
  147. context6.closePath();
  148. context6.stroke();
  149. // 测试清空画布
  150. var c7=document.getElementById("myCanvas7");
  151. var context7=c7.getContext("2d");
  152. context7.beginPath();
  153. context7.arc(150, 150, 100, -Math.PI*1/6, -Math.PI*5/6, true);
  154. context7.stroke();
  155. // 清空画布
  156. function clearMap(){
  157. context7.clearRect(0,0,300,150);
  158. }
  159. </script>
  160. </body>
  161. </html>
绘制贝塞尔曲线:
   
   
  1. <dl>
  2. <dt><h1>绘制二次贝塞尔曲线</h1></dt>
  3. <dd>
  4. <ol>
  5. <li>quadraticCurveTo(cp1x,cp1y,x,y),cp1x,cp1y为控制点的坐标,x,y为终点坐标;</li>
  6. </ol>
  7. </dd>
  8. <canvas id="myCanvas8" style="border:1px solid #ff0" width="300" height="200">
  9. </canvas>
  10. </dl>
  11. <dl>
  12. <dt><h1>绘制三次贝塞尔曲线</h1></dt>
  13. <dd>
  14. <ol>
  15. <li>bezierCurveTo(cp1x,cp1y,cp2x,cp2y,x,y);cp1x,cp1y是第一个控制点的坐标;cp2x,cp2y是第二个坐标的控制点</li>
  16. </ol>
  17. <canvas id="myCanvas9" style="border:1px solid #ff0" width="300" height="200">
  18. </canvas>
  19. </dd>
  20. </dl>
  21. // 绘制贝塞尔曲线
  22. var c8 = document.getElementById("myCanvas8");
  23. var context8=c8.getContext("2d");
  24. context8.strokeStyle="#ff00ff";
  25. context8.beginPath();
  26. context8.moveTo(0, 200);
  27. context8.quadraticCurveTo(75, 50, 300, 200);
  28. context8.stroke();
  29. context8.globalCompositeOperation="source-over";
  30. // 绘制三次贝塞尔曲线
  31. var c9=document.getElementById("myCanvas9");
  32. var context9=c9.getContext("2d");
  33. context9.strokeStyle="#ff0";
  34. context9.beginPath();
  35. context9.moveTo(0, 200);
  36. context9.bezierCurveTo(25,50,75,50,300,200);
  37. context9.stroke();
  38. context9.globalCompositeOperation="source-over";
图形的变化---保存与恢复canvas状态
    
    
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <title>图形的变换</title>
  6. </head>
  7. <body>
  8. <dl>
  9. <dt><h1>保存与恢复Canvas状态</h1></dt>
  10. <dd>
  11. <ol>
  12. <li>save() :保存canvas的状态到堆中</li>
  13. <li>restore:从堆中恢复canvas的状态</li>
  14. </ol>
  15. <canvas id="myCanvas1" style="border: 1px solid #ff0;" width="300" height="200">
  16. </canvas>
  17. </dd>
  18. </dl>
  19. </body>
  20. <script type="text/javascript">
  21. // 保存和恢复canvas
  22. var c1=document.getElementById("myCanvas1");
  23. var context1=c1.getContext("2d");
  24. // 绘制一个矩形
  25. context1.fillStyle="#ff00ff";
  26. context1.strokeStyle="red";
  27. context1.fillRect(20, 20, 100, 100);
  28. context1.strokeRect(20,20,100,100);
  29. context1.fill();
  30. context1.stroke();
  31. // 保存当前的状态
  32. context1.save();
  33. // 绘制另外一个矩形
  34. context1.fillStyle="#f00";
  35. context1.strokeStyle="green";
  36. context1.fillRect(140, 20, 100, 100);
  37. context1.fillRect(140, 20, 100, 100);
  38. context1.fill();
  39. context1.stroke();
  40. //恢复第一个矩形的状态
  41. context1.restore();
  42. //绘制两个矩形
  43. context1.fillRect(20, 140, 50, 50);
  44. context1.strokeRect(80,140,50,50);
  45. </script>
  46. </html>
图形的变化---移动坐标空间
     
     
  1. <dl> <dt><h1>移动坐标空间</h1></dt> <dd> <ol> <li>context.translate(dx,dy),dx和dy分变为水平和垂直的便宜量</li> <li>注意:移动之前会先保存画布</li> </ol> </dd> </dl>
  2. <canvas id="myCanvas1" style="border:1px solid #ff0" width="300" height="200"></canvas>
  3. var ctx1=document.getElementById("myCanvas1").getContext("2d");
  4. ctx1.translate(50,50);
  5. ctx1.fillStyle="#ff0";
  6. ctx1.fillRect(0, 0, 100, 100);
效果
图形的变化--旋转坐标空间:
      
      
  1. <dl>
  2. <dt><h1>旋转坐标空间</h1></dt>
  3. <dd>
  4. <ol>
  5. <li>方法是rotate(angle)</li>
  6. <li>以原点为中心旋转,顺时针为正,选装的是canvas</li>
  7. </ol>
  8. <canvas id="myCanvas2" style="border:1px solid #ff0" width="700" height="300"></canvas>
  9. </dd>
  10. </dl>
  11. // 旋转坐标空间
  12. var ctx2=document.getElementById("myCanvas2").getContext("2d");
  13. ctx2.save();
  14. ctx2.rotate(Math.PI*1/4);
  15. ctx2.fillStyle="#ff00ff";
  16. ctx2.fillRect(0, 0, 100, 100);
  17. ctx2.restore();
 
图形的变化--缩放图形:
       
       
  1. <dl>
  2. <dt><h1>缩放图形</h1></dt>
  3. <dd>
  4. <ol>
  5. <li>方法scale(x,y)</li>
  6. <li>大于1的值是放大,小于1的值是缩小</li>
  7. </ol>
  8. <canvas id="myCanvas3" style="border:1px solid #ff0" width="700" height="300">
  9. </canvas>
  10. </dd>
  11. </dl>
  12. // 缩放图形
  13. var ctx3=document.getElementById("myCanvas3").getContext("2d");
  14. ctx3.save();
  15. ctx3.fillStyle="#ff00ff";
  16. ctx3.scale(1.9,1.1);
  17. ctx3.fillRect(100, 100, 100, 100);
  18. ctx3.restore();
结果:
图形的变化--矩阵的变换:
  • 可以实现平移,旋转,缩放,切变和镜像反射
  • 方法:context.transform(m11x,m12y,m21x,m22y,dx,dy);写成矩阵是
  • 矩阵变换后:x`=m11x+m21y+dx;  y`=m12x+m22y+dy;
  • 移动的矩阵:(1,0,0,1,dx,dy); (0,1,1,0,dx,dy);
  • 缩放的矩阵:(m11,0,0,m22,0,0);(0,m12,m21,0,0,0);
  • 旋转:(cos0,sin0,-sin0,cose0,0,0);
  • 将当前的矩阵变换为最初的矩阵:setTransform(m11,m12,m21,m22,dx,dy),会先重置再变换 

图形的组合
     
     
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <title>图形的组合</title>
  6. </head>
  7. <body>
  8. <dl>
  9. <dt><h1>图形的组合</h1></dt>
  10. <dd>
  11. <ol>
  12. <li>globalCompositeOperation,指定它的值,来改变图形的绘制顺序和绘制方式</li>
  13. <li>globalAlpha,指定图形的透明度</li>
  14. <li>次法放老图形和新图形的中间</li>
  15. </ol>
  16. </dd>
  17. </dl>
  18. <dl>
  19. <dt><h1>source-over 默认值</h1></dt>
  20. <dd>
  21. <ol>
  22. <li>新的图形覆盖在原图形上,默认值,source-over</li>
  23. </ol>
  24. <canvas id="myCanvas1" style="border: 1px solid #ff0;" height="200">
  25. </canvas>
  26. </dd>
  27. <dt><h1>destination-over</h1></dt>
  28. <dd>
  29. <ol>
  30. <li>原有的图形覆盖在新的图形之上</li>
  31. </ol>
  32. <canvas id="myCanvas2" style="border: 1px solid #ff0;" height="200">
  33. </canvas>
  34. </dd>
  35. <dt><h1>source-atop</h1></dt>
  36. <dd>
  37. <ol>
  38. <li>只是绘制原有的内容+重叠部分,且新在原上</li>
  39. </ol>
  40. <canvas id="myCanvas3" style="border: 1px solid #ff0;" height="200">
  41. </canvas>
  42. </dd>
  43. <dt><h1>destination-atop</h1></dt>
  44. <dd>
  45. <ol>
  46. <li>只是绘制原有的内容+重叠部分,且原在新的上面</li>
  47. </ol>
  48. <canvas id="myCanvas4" style="border: 1px solid #ff0;" height="200">
  49. </canvas>
  50. </dd>
  51. <dt><h1>source-in</h1></dt>
  52. <dd>
  53. <ol>
  54. <li>重叠部分,且新在上</li>
  55. </ol>
  56. <canvas id="myCanvas5" style="border: 1px solid #ff0;" height="200">
  57. </canvas>
  58. </dd>
  59. <dt><h1>destination-in</h1></dt>
  60. <dd>
  61. <ol>
  62. <li>重叠部分,且原在上</li>
  63. </ol>
  64. <canvas id="myCanvas6" style="border: 1px solid #ff0;" height="200">
  65. </canvas>
  66. </dd>
  67. <dt><h1>source-out</h1></dt>
  68. <dd>
  69. <ol>
  70. <li>新图形-重叠部分</li>
  71. </ol>
  72. <canvas id="myCanvas7" style="border: 1px solid #ff0;" height="200">
  73. </canvas>
  74. </dd>
  75. <dt><h1>destination-out</h1></dt>
  76. <dd>
  77. <ol>
  78. <li>原图形-重叠部分</li>
  79. </ol>
  80. <canvas id="myCanvas8" style="border: 1px solid #ff0;" height="200">
  81. </canvas>
  82. </dd>
  83. <dt><h1>lighter</h1></dt>
  84. <dd>
  85. <ol>
  86. <li>都显示,重叠部分加色处理</li>
  87. </ol>
  88. <canvas id="myCanvas9" style="border: 1px solid #ff0;" height="200">
  89. </canvas>
  90. </dd>
  91. <dt><h1>darker</h1></dt>
  92. <dd>
  93. <ol>
  94. <li>都显示,重叠部分减色处理</li>
  95. </ol>
  96. <canvas id="myCanvas10" style="border: 1px solid #ff0;" height="200">
  97. </canvas>
  98. </dd>
  99. <dt><h1>copy</h1></dt>
  100. <dd>
  101. <ol>
  102. <li>只保留新图形</li>
  103. </ol>
  104. <canvas id="myCanvas11" style="border: 1px solid #ff0;" height="200">
  105. </canvas>
  106. </dd>
  107. <dt><h1>xor</h1></dt>
  108. <dd>
  109. <ol>
  110. <li>重叠的部分变为透明</li>
  111. </ol>
  112. <canvas id="myCanvas12" style="border: 1px solid #ff0;" height="200">
  113. </canvas>
  114. </dd>
  115. <dt><h1>globalAlpha</h1></dt>
  116. <dd>
  117. <ol>
  118. <li>指定图像的透明度</li>
  119. </ol>
  120. <canvas id="myCanvas13" style="border: 1px solid #ff0;" height="200">
  121. </canvas>
  122. </dd>
  123. </dl>
  124. <script type="text/javascript">
  125. // source-over 默认值
  126. var ctx1=document.getElementById("myCanvas1").getContext("2d");
  127. ctx1.fillStyle="red";
  128. ctx1.fillRect(50, 50, 100, 100);
  129. ctx1.globalCompositeOperation="source-over";
  130. ctx1.fillStyle="blue";
  131. ctx1.beginPath();
  132. ctx1.arc(150, 125, 50, 0, Math.PI*2, true);
  133. ctx1.closePath();
  134. ctx1.fill();
  135. // destination-over 原有的图形覆盖在新图形上
  136. var ctx2=document.getElementById("myCanvas2").getContext("2d");
  137. ctx2.fillStyle="red";
  138. ctx2.fillRect(50, 50, 100, 100);
  139. ctx2.globalCompositeOperation="destination-over";
  140. ctx2.fillStyle="blue";
  141. ctx2.beginPath();
  142. ctx2.arc(150, 125, 50, 0, Math.PI*2, true);
  143. ctx2.closePath();
  144. ctx2.fill();
  145. // source-atop
  146. var ctx3=document.getElementById("myCanvas3").getContext("2d");
  147. ctx3.fillStyle="red";
  148. ctx3.fillRect(50, 50, 100, 100);
  149. ctx3.globalCompositeOperation="source-atop";
  150. ctx3.fillStyle="blue";
  151. ctx3.beginPath();
  152. ctx3.arc(150, 125, 50, 0, Math.PI*2, true);
  153. ctx3.closePath();
  154. ctx3.fill();
  155. // destination-atop
  156. var ctx4=document.getElementById("myCanvas4").getContext("2d");
  157. ctx4.fillStyle="red";
  158. ctx4.fillRect(50, 50, 100, 100);
  159. ctx4.globalCompositeOperation="destination-atop";
  160. ctx4.fillStyle="blue";
  161. ctx4.beginPath();
  162. ctx4.arc(150, 125, 50, 0, Math.PI*2, true);
  163. ctx4.closePath();
  164. ctx4.fill();
  165. // source-in
  166. var ctx5=document.getElementById("myCanvas5").getContext("2d");
  167. ctx5.fillStyle="red";
  168. ctx5.fillRect(50, 50, 100, 100);
  169. ctx5.globalCompositeOperation="source-in";
  170. ctx5.fillStyle="blue";
  171. ctx5.beginPath();
  172. ctx5.arc(150, 125, 50, 0, Math.PI*2, true);
  173. ctx5.closePath();
  174. ctx5.fill();
  175. // source-in
  176. var ctx6=document.getElementById("myCanvas6").getContext("2d");
  177. ctx6.fillStyle="red";
  178. ctx6.fillRect(50, 50, 100, 100);
  179. ctx6.globalCompositeOperation="destination-in";
  180. ctx6.fillStyle="blue";
  181. ctx6.beginPath();
  182. ctx6.arc(150, 125, 50, 0, Math.PI*2, true);
  183. ctx6.closePath();
  184. ctx6.fill();
  185. // source-out
  186. var ctx7=document.getElementById("myCanvas7").getContext("2d");
  187. ctx7.fillStyle="red";
  188. ctx7.fillRect(50, 50, 100, 100);
  189. ctx7.globalCompositeOperation="source-out";
  190. ctx7.fillStyle="blue";
  191. ctx7.beginPath();
  192. ctx7.arc(150, 125, 50, 0, Math.PI*2, true);
  193. ctx7.closePath();
  194. ctx7.fill();
  195. // destination-out
  196. var ctx8=document.getElementById("myCanvas8").getContext("2d");
  197. ctx8.fillStyle="red";
  198. ctx8.fillRect(50, 50, 100, 100);
  199. ctx8.globalCompositeOperation="destination-out";
  200. ctx8.fillStyle="blue";
  201. ctx8.beginPath();
  202. ctx8.arc(150, 125, 50, 0, Math.PI*2, true);
  203. ctx8.closePath();
  204. ctx8.fill();
  205. // lighter
  206. var ctx9=document.getElementById("myCanvas9").getContext("2d");
  207. ctx9.fillStyle="red";
  208. ctx9.fillRect(50, 50, 100, 100);
  209. ctx9.globalCompositeOperation="lighter";
  210. ctx9.fillStyle="blue";
  211. ctx9.beginPath();
  212. ctx9.arc(150, 125, 50, 0, Math.PI*2, true);
  213. ctx9.closePath();
  214. ctx9.fill();
  215. // darker
  216. var ctx10=document.getElementById("myCanvas10").getContext("2d");
  217. ctx10.fillStyle="red";
  218. ctx10.fillRect(50, 50, 100, 100);
  219. ctx10.globalCompositeOperation="darker";
  220. ctx10.fillStyle="blue";
  221. ctx10.beginPath();
  222. ctx10.arc(150, 125, 50, 0, Math.PI*2, true);
  223. ctx10.closePath();
  224. ctx10.fill();
  225. // copy
  226. var ctx11=document.getElementById("myCanvas11").getContext("2d");
  227. ctx11.fillStyle="red";
  228. ctx11.fillRect(50, 50, 100, 100);
  229. ctx11.globalCompositeOperation="copy";
  230. ctx11.fillStyle="blue";
  231. ctx11.beginPath();
  232. ctx11.arc(150, 125, 50, 0, Math.PI*2, true);
  233. ctx11.closePath();
  234. ctx11.fill();
  235. // xor
  236. var ctx12=document.getElementById("myCanvas12").getContext("2d");
  237. ctx12.fillStyle="red";
  238. ctx12.fillRect(50, 50, 100, 100);
  239. ctx12.globalCompositeOperation="xor";
  240. ctx12.fillStyle="blue";
  241. ctx12.beginPath();
  242. ctx12.arc(150, 125, 50, 0, Math.PI*2, true);
  243. ctx12.closePath();
  244. ctx12.fill();
  245. // globalAlpha
  246. var ctx13=document.getElementById("myCanvas13").getContext("2d");
  247. ctx13.fillStyle="red";
  248. ctx13.fillRect(50, 50, 100, 100);
  249. ctx13.globalAlpha="0.5";
  250. ctx13.fillStyle="blue";
  251. ctx13.beginPath();
  252. ctx13.arc(150, 125, 50, 0, Math.PI*2, true);
  253. ctx13.closePath();
  254. ctx13.fill();
  255. </script>
  256. </body>
  257. </html>

图形的裁切
    
    
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <title>图形的裁切</title>
  6. </head>
  7. <body>
  8. <dl>
  9. <dt>
  10. <h1>图形的裁切</h1>
  11. </dt>
  12. <dd>
  13. <ol>
  14. <li>clip</li>
  15. <li>原理是给图形蒙一层蒙版,没有被蒙住的,会被隐藏</li>
  16. <canvas id="myCanvas" style="border: 1px solid #ff0;" height="300">
  17. </canvas>
  18. </ol>
  19. </dd>
  20. </dl>
  21. <script type="text/javascript">
  22. var ctx=document.getElementById("myCanvas").getContext("2d");
  23. ctx.fillStyle="black";
  24. ctx.fillRect(0, 0, 300, 300);
  25. ctx.fill();
  26. // 绘制圆形
  27. ctx.beginPath();
  28. ctx.arc(150, 150, 100, 0 , Math.PI*2 , true);
  29. // 裁切路径
  30. ctx.clip();
  31. ctx.fillStyle="red";
  32. ctx.fillRect(50,50,150 , 150);
  33. </script>
  34. </body>
  35. </html>
线型的选择
  • lineWidth:设置线条的粗细,默认值为1;
  • lineCap:设置端点的样式,butt(平头)、round(圆头)、square(方头);
  • lineJoin:设置连接处样式,round(圆头)、bevel(斜平面)、miter(直头)默认;
  • miterLimit:设置绘制交点的方式,给斜面长度设置一个上限,默认为10,当斜面长度超过线条宽度的10倍的时候,就会变成斜角。只是适用于miter。
绘制渐变
  • 线性渐变:
    • 方法:createLinearGradient(x1,y1,x2,y2), 其中(x1,y1)是起点,(x2,y2)是终点;
    • addColorStop(position,color):position是0~1的浮点;
  • 径向渐变:
    • 方法:createRadialGradient(x1,y1,r1,x2,y2,r2);
    • addColorStop(position,color),position的值是0~1
     
     
  1. // 线性渐变
  2. var ctx1=document.getElementById("myCanvas1").getContext("2d");
  3. var lingrad=ctx1.createLinearGradient(0,0,0,200);
  4. lingrad.addColorStop(1/7,'#ff0000');
  5. lingrad.addColorStop(2/7,'#ff9900');
  6. lingrad.addColorStop(3/7,'#00ff00');
  7. lingrad.addColorStop(4/7,'#00ffff');
  8. lingrad.addColorStop(5/7,'#0000ff');
  9. lingrad.addColorStop(6/7,'#ff00ff');
  10. lingrad.addColorStop(1,'#ff0000');
  11. ctx1.fillStyle=lingrad;
  12. ctx1.strokeStyle=lingrad;
  13. ctx1.fillRect(10,10,200,200);
绘制图案:
  • createPattern(img,type),type是类型,有repeat,repeat-x,repeat-y,no-repeat
  • 注意:先有pattern对象,然后设置fillStyle
  • 可以是img或者canvas
       
       
  1. <dt><h1>绘制图案</h1></dt>
  2. <dd>
  3. <ol>
  4. <li>createPattern(img,type),type是类型,有repeat,repeat-x,repeat-y,no-repeat</li>
  5. <li>注意:先有pattern对象,然后设置fillStyle</li>
  6. </ol>
  7. <canvas id="myCanvas3" width="600" height="300" style="border: 1px solid #ff0;">
  8. </canvas>
  9. </dd>
  10. //绘制图案
  11. var ctx3=document.getElementById("myCanvas3").getContext("2d");
  12. var img=new Image();
  13. img.src="banner-ilvcrp.png";
  14. img.onload=function(){
  15. var ptrn=ctx3.createPattern(img,'repeat');
  16. ctx3.fillStyle=ptrn;
  17. ctx3.fillRect(0,0,600,300);
  18. }
创建阴影:
  • 用到四个属性:
    • ctx.shadowOffsetX=float;
    • ctx.shadowOffsetY=float;
    • ctx.shadowBlur=flaot;
    • ctx.shadowColor=color;
       
       
  1. <dt><h1>创阴影建</h1></dt>
  2. <dd>
  3. <ol>
  4. <li>shadowOffsetX</li>
  5. <li>shadowOffsetY</li>
  6. <li>shadowBlur</li>
  7. <li>shadowColor</li>
  8. </ol>
  9. <canvas id="myCanvas4" width="600" height="300" style="border: 1px solid #ff0;">
  10. </canvas>
  11. </dd>
  12. //创建阴影
  13. var ctx4=document.getElementById("myCanvas4").getContext("2d");
  14. // 设置阴影
  15. ctx4.shadowOffsetX=3;
  16. ctx4.shadowOffset=3;
  17. ctx4.shadowBlur=2;
  18. ctx4.shadowColor="rgba(0,0,0,.5)";
  19. // 绘制矩形
  20. ctx4.fillStyle="#33ccff";
  21. ctx4.fillRect(20, 20, 300, 60);
  22. ctx4.fill();
绘制文字:
  • 填充文字:ctx.fillText(text,x,y,[maxW]),maxW是显示文字时候的最大的宽度,超过最大的宽度,字儿会变瘦;
  • 绘制文字的轮廓:ctx.strokeText(text,x,y,[maxW])
  • 文字的相关属性:
    • font:
    • textAlign:left/right/center/start/end
    • textBaseline:top/middle/bottom/
  • 测量文字的宽度:measureText(text);
       
       
  1. <dt><h1>绘制文字</h1></dt>
  2. <dd>
  3. <canvas id="myCanvas5" width="350" height="200" style="border: 1px solid #ff0;">
  4. </canvas>
  5. </dd>
  6. // 绘制文字
  7. var ctx5=document.getElementById("myCanvas5").getContext("2d");
  8. ctx5.font="italic 35px 黑体";
  9. ctx5.fillStyle="red";
  10. ctx5.fillText("绘制填充文字",30,60,200);
  11. ctx5.strokeStyle="blue";
  12. ctx5.strokeText("绘制轮廓文字",30,120,200);
  13. // 测量文字的宽度
  14. var txt1="我是要测量宽度的文字";
  15. ctx5.fillText(txt1,30,140);
  16. var mtxt1=ctx5.measureText(txt1);
  17. ctx5.fillText(mtxt1.width,160,80);
操作和使用图像:
  • 引入图像:ctx.drawImage(img,x,y);
  • 改变图像大小:ctx.drawImage(img,x,y,w,h);
  • 创建图像切片:ctx.drawImage(img,sx,sy,sw,sh,dx,dy,dw,dh),
    • sx,sy:指得是被原图的被裁切区域的起始位置
    • sw,sh:指得是被裁切的宽度和高度
    • dx,dy:在画布上显示的位置
    • dw,wh:在画布上显示的宽和高
  • 注意:为了实现图片预加载,先创建img,然后使用onload方法,最后指定url
       
       
  1. // 引入图像
  2. var ctx6=document.getElementById("myCanvas6").getContext("2d");
  3. var img=new Image();
  4. img.onload=function(){ //这样可以实现预加载
  5. ctx6.drawImage(img,0,0);
  6. };
  7. img.src='banner-ilvcrp.png';
  8. // 改变图像大小
  9. var ctx7=document.getElementById("myCanvas7").getContext("2d");
  10. var img=new Image();
  11. img.onload=function(){ //这样可以实现预加载
  12. ctx7.drawImage(img,0,0,300,100);
  13. };
  14. img.src='banner-ilvcrp.png';
  15. // 创建图像切片
  16. var ctx8=document.getElementById("myCanvas8").getContext("2d");
  17. var img=new Image();
  18. img.onload=function(){ //这样可以实现预加载
  19. ctx8.drawImage(img,0,0,300,200,0,0,400,300);
  20. };
  21. img.src='banner-ilvcrp.png';
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值