热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

HTML5Canvas绘图——使用Canvas绘制图形图文教程使用html5canvas绘制精美的图_html5教程技巧

本文通过八种示例给大家分享了html5canvas绘图,需要的朋友一起来学习吧
HTML5火的正热,最近有个想法也是要用到HTML的相关功能,所以也要好好学习一把。

好好看了一下Canvas的功能,感觉HTML5在客户端交互的功能性越来越强了,今天看了一下Canvas绘图,下边是几个实例,记下以备后用。

1、使用Canvas绘制直线:



XML/HTML Code复制内容到剪贴板

  1. >
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. head>
  6. <style type="text/css">
  7. canvas{border:dashed 2px #CCC}
  8. style>
  9. <script type="text/Javascript">
  10. function $$(id){
  11. return document.getElementById(id);
  12. }
  13. function pageLoad(){
  14. var can = $$('can');
  15. var cancans = can.getContext('2d');
  16. cans.moveTo(20,30);//第一个起点
  17. cans.lineTo(120,90);//第二个点
  18. cans.lineTo(220,60);//第三个点(以第二个点为起点)
  19. cans.lineWidth=3;
  20. cans.strokeStyle = 'red';
  21. cans.stroke();
  22. }
  23. script>
  24. <body onload="pageLoad();">
  25. <canvas id="can" width="400px" height="300px">4canvas>
  26. body>
  27. html>

这里用到的两个API方法,moveTo和lineTo分别是线段的起点和终点坐标,变量为(X坐标,Y坐标),strokeStyle、stroke分别路径绘制样式和绘制路径。

2、绘制渐变线条

渐变线条就是颜色有渐变的效果,当然渐变的样式可以遵循路径的方向也可以不遵循路径的方向:

XML/HTML Code复制内容到剪贴板

  1. >
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. head>
  6. <style type="text/css">
  7. canvas{border:dashed 2px #CCC}
  8. style>
  9. <script type="text/Javascript">
  10. function $$(id){
  11. return document.getElementById(id);
  12. }
  13. function pageLoad(){
  14. var can = $$('can');
  15. var cancans = can.getContext('2d');
  16. cans.moveTo(0,0);
  17. cans.lineTo(400,300);
  18. var gnt1 = cans.createLinearGradient(0,0,400,300);//线性渐变的起止坐标
  19. gnt1.addColorStop(0,'red');//创建渐变的开始颜色,0表示偏移量,个人理解为直线上的相对位置,最大为1,一个渐变中可以写任意个渐变颜色
  20. gnt1.addColorStop(1,'yellow');
  21. cans.lineWidth=3;
  22. cans.strokeStyle = gnt1;
  23. cans.stroke();
  24. }
  25. script>
  26. <body onload="pageLoad();">
  27. <canvas id="can" width="400px" height="300px">4canvas>
  28. body>
  29. html>

3、绘制矩形或正方形:

这种矩形框如果使用HTML4只能使用后台代码才能生成了,现在HTML5提供的Canvas功能却很容易就能绘制,所以说HTML5的优越性是相当高的。

XML/HTML Code复制内容到剪贴板

  1. >
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. head>
  6. <style type="text/css">
  7. canvas{border:dashed 2px #CCC}
  8. style>
  9. <script type="text/Javascript">
  10. function $$(id){
  11. return document.getElementById(id);
  12. }
  13. function pageLoad(){
  14. var can = $$('can');
  15. var cancans = can.getContext('2d');
  16. cans.fillStyle = 'yellow';
  17. cans.fillRect(30,30,340,240);
  18. }
  19. script>
  20. <body onload="pageLoad();">
  21. <canvas id="can" width="400px" height="300px">4canvas>
  22. body>
  23. html>

这里使用了一个方法——fillRect()从字面意思也能知道这个就是填充一个矩形,这里的参数值得说明一下fillRect(X,Y,Width,Height),这个和数学里的坐标是不一样的,具体请看

这里的X,Y是相对Canvas左上角的起点开始的,谨记!!

4、绘制一个简单的矩形框

上例中讲到要绘制一个矩形块,填充了颜色,这个例子只是简单地绘制一个矩形而不实现填充效果。

XML/HTML Code复制内容到剪贴板

  1. >
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. head>
  6. <style type="text/css">
  7. canvas{border:dashed 2px #CCC}
  8. style>
  9. <script type="text/Javascript">
  10. function $$(id){
  11. return document.getElementById(id);
  12. }
  13. function pageLoad(){
  14. var can = $$('can');
  15. var cancans = can.getContext('2d');
  16. cans.strokeStyle = 'red';
  17. cans.strokeRect(30,30,340,240);
  18. }
  19. script>
  20. <body onload="pageLoad();">
  21. <canvas id="can" width="400px" height="300px">4canvas>
  22. body>
  23. html>

这个很简单,和上例一样,就是将fill替换成了stroke,具体详见上例。

5、绘制一个线性渐变的矩形

渐变是填充的一种相当不错的效果,结合实例2和实例3,我们可以创建一个渐变的矩形

XML/HTML Code复制内容到剪贴板

  1. >
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. head>
  6. <style type="text/css">
  7. canvas{border:dashed 2px #CCC}
  8. style>
  9. <script type="text/Javascript">
  10. function $$(id){
  11. return document.getElementById(id);
  12. }
  13. function pageLoad(){
  14. var can = $$('can');
  15. var cancans = can.getContext('2d');
  16. var gnt1 = cans.createLinearGradient(10,0,390,0);
  17. gnt1.addColorStop(0,'red');
  18. gnt1.addColorStop(0.5,'green');
  19. gnt1.addColorStop(1,'blue');
  20. cans.fillStyle = gnt1;
  21. cans.fillRect(10,10,380,280);
  22. }
  23. script>
  24. <body onload="pageLoad();">
  25. <canvas id="can" width="400px" height="300px">4canvas>
  26. body>
  27. html>

不解释了,记住fillRect(X,Y,Width,Height)就行了。

6、填充一个圆形


圆形的用途很广,当然也包含了椭圆。

XML/HTML Code复制内容到剪贴板

  1. >
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. head>
  6. <style type="text/css">
  7. canvas{border:dashed 2px #CCC}
  8. style>
  9. <script type="text/Javascript">
  10. function $$(id){
  11. return document.getElementById(id);
  12. }
  13. function pageLoad(){
  14. var can = $$('can');
  15. var cancans = can.getContext('2d');
  16. cans.beginPath();
  17. cans.arc(200,150,100,0,Math.PI*2,true);
  18. cans.closePath();
  19. cans.fillStyle = 'green';//本来这里最初使用的是red,截图一看,傻眼了,怕上街被爱国者打啊,其实你懂的~~
  20. cans.fill();
  21. }
  22. script>
  23. <body onload="pageLoad();">
  24. <canvas id="can" width="400px" height="300px">4canvas>
  25. body>
  26. html>

这里的arc方法的用法是 arc(X,Y,Radius,startAngle,endAngle,anticlockwise),意思是(圆心X坐标,圆心Y坐标,半径,开始角度(弧度),结束角度弧度,是否按照顺时针画);

arc中各参数比较:

a、cans.arc(200,150,100,0,Math.PI,true);

c、cans.arc(200,150,100,0,Math.PI/2,true);

c、cans.arc(200,150,100,0,Math.PI/2,true);

d、cans.arc(200,150,100,0,Math.PI/2,false);

7、圆形区块

XML/HTML Code复制内容到剪贴板

  1. >
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. head>
  6. <style type="text/css">
  7. canvas{border:dashed 2px #CCC}
  8. style>
  9. <script type="text/Javascript">
  10. function $$(id){
  11. return document.getElementById(id);
  12. }
  13. function pageLoad(){
  14. var can = $$('can');
  15. var cancans = can.getContext('2d');
  16. cans.beginPath();
  17. cans.arc(200,150,100,0,Math.PI*2,false);
  18. cans.closePath();
  19. cans.lineWidth = 5;
  20. cans.strokeStyle = 'red';
  21. cans.stroke();
  22. }
  23. script>
  24. <body onload="pageLoad();">
  25. <canvas id="can" width="400px" height="300px">4canvas>
  26. body>
  27. html>

这里不解释了,和上边的例子相同,lineWidth是控制线条的宽度的。

8、圆形渐变

XML/HTML Code复制内容到剪贴板

  1. >
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. head>
  6. <style type="text/css">
  7. canvas{border:dashed 2px #CCC}
  8. style>
  9. <script type="text/Javascript">
  10. function $$(id){
  11. return document.getElementById(id);
  12. }
  13. function pageLoad(){
  14. var can = $$('can');
  15. var cancans = can.getContext('2d');
  16. var gnt = cans.createRadialGradient(200,300,50,200,200,200);
  17. gnt.addColorStop(1,'red');
  18. gnt.addColorStop(0,'green');
  19. cans.fillStyle = gnt;
  20. cans.fillRect(0,0,800,600);
  21. }
  22. script>
  23. <body onload="pageLoad();">
  24. <canvas id="can" width="800px" height="600px">4canvas>
  25. body>
  26. html>

这里需要说明的是createRadialGradient方法,参数有(Xstart,Ystart,radiusStart,XEnd,YEnd,radiusEnd),也就是说,它在实行渐变时,使用了两个圆,一个是原始的圆,一个是渐变式圆,其实,这种通过坐标与半径控制的方式可以实现很多样式,比如

立体圆

XML/HTML Code复制内容到剪贴板

  1. var gnt = cans.createRadialGradient(200,150,0,200,50,250);
  2. gnt.addColorStop(0,'red');
  3. gnt.addColorStop(1,'#333');

推荐阅读
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 表单提交前的最后验证:通常在表单提交前,我们必须确认用户是否都把必须填选的做了,如果没有,就不能被提交到服务器,这里我们用到表单的formname.submit()看演示,其实这个对于我们修炼道 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 本文介绍了指针的概念以及在函数调用时使用指针作为参数的情况。指针存放的是变量的地址,通过指针可以修改指针所指的变量的值。然而,如果想要修改指针的指向,就需要使用指针的引用。文章还通过一个简单的示例代码解释了指针的引用的使用方法,并思考了在修改指针的指向后,取指针的输出结果。 ... [详细]
  • 在project.properties添加#Projecttarget.targetandroid-19android.library.reference.1..Sliding ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • 本文介绍了解决IE678伪类不兼容问题的方法,包括少用CSS3和HTML5独有的属性,使用CSS hacker,使用last-child清除浮动、批量添加标签、去掉list item最后一个的border-right等技巧。同时还介绍了使用after清除浮动时加上IE独有属性zoom:1的处理方法。另外,本文还提到可以使用jQuery代替批量添加标签的功能,以及使用负边距和CSS2选择器element+element去掉list item最后一个的border-right的方法。 ... [详细]
  • CSS标签、类名和ID选择器的使用区别
    本文讲解了CSS中标签选择器、类名选择器和ID选择器的使用区别,主要包括加空格和不加空格的区别。通过示例代码,说明了加空格表示选择当前节点的后代节点,而不加空格表示一个元素的多个类名不能加空格的规则。 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
author-avatar
陈俊铭冠萍育维
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有