当前位置: 首页 > news >正文

canvas练习 - 七巧板绘制

用到的方法:

注意点:

  • stokeStyle等样式要在stroke前边
  • 如果最后只有一个stroke或者fill,那么只填充最后一次路径的,之前的也会画出来但是没有填充看不到。所以每次begin+close Path后要fill或者stroke
  1 <!DOCTYPE html>
  2 <html lang="en">
  3 
  4 <head>
  5   <meta charset="UTF-8">
  6   <meta name="author" content="xing.org1^">
  7   <meta name="viewport" content="width=device-width, initial-scale=1.0">
  8   <meta http-equiv="X-UA-Compatible" content="ie=edge">
  9   <title>canvas画七巧板</title>
 10   <style>
 11     /*
 12     * @Author: guojufeng@ 
 13     * @Date: 2018-09-18 12:23:44
 14     */
 15     body{
 16       background: #fff;
 17     }
 18     canvas {
 19       margin: 0 auto;
 20       cursor: pointer;
 21       border: 1px solid #eee;
 22     }
 23   </style>
 24 </head>
 25 
 26 <body>
 27   <canvas id="canvas" width="500" height="500">
 28     您的浏览器不支持canvas,请更换
 29   </canvas>
 30   <script>
 31     // function DrawLine(arr) {
 32     //   /* 之前这种写法,以为要一个moveTo一个lineTo的,后来发现moveTo一个开头就行了,剩下的就是lineTo一直走,且最后一个可以不闭合,就是最后一个lineTo可以不回到点上,这样的形状不闭合 */
 33     //   for (var i = 0; i < arr.length; i++) {
 34     //     context.moveTo(arr[i][0], arr[i][1]);
 35     //     if (i == arr.length - 1) { //最后一个点
 36     //       context.lineTo(arr[0][0], arr[0][1]);
 37     //     } else {
 38     //       context.lineTo(arr[i + 1][0], arr[i + 1][1]);
 39     //     }
 40     //   }
 41     // }
 42     function DrawLine(arr,context) {
 43       for(var d = 0; d < arr.length; d++){
 44         var inArr = arr[d]['num'];
 45         context.beginPath();
 46         context.moveTo(inArr[0][0], inArr[0][1]);
 47         /* 如果只是填充颜色,可以不管最后一个lineTo的点要回到圆点的事情。
 48           context.moveTo(inArr[0][0], inArr[0][1]);
 49           for (var i = 0; i < inArr.length; i++) {
 50             context.lineTo(inArr[i][0], inArr[i][1]);
 51           }
 52         context.strokeStyle = arr[d]['color']; //填充颜色
 53         context.stroke();
 54         */
 55         /* 为了闭合图形(画线情况),你也可以判断最后一个点时,让他回到初始值。如下: */
 56         for (var i = 0; i < inArr.length; i++) {
 57           if (i == inArr.length-1) { //最后一个点
 58             context.lineTo(inArr[0][0], inArr[0][1]);
 59           } else {
 60             context.lineTo(inArr[i+1][0], inArr[i+1][1]);
 61           }
 62         }
 63         context.fillStyle = arr[d]['color'];
 64         context.fill();//每次循环也要重新画一遍
 65         context.lineWidth = 3;
 66         context.strokeStyle = '#333';
 67         context.stroke();//每次循环也要重新画一遍
 68       }
 69     }
 70     
 71     window.onload = function(){
 72       var myCanvas = document.getElementById('canvas');
 73       var context = myCanvas.getContext('2d');
 74       var tangram = [{
 75         name: '等腰三角形蓝',
 76         num: [
 77           [0, 0],
 78           [250, 250],
 79           [0, 500]
 80         ],
 81         color: '#62d2ff'
 82       },{
 83         name: '等腰三角形绿',
 84         num: [
 85           [0, 0],
 86           [500, 0],
 87           [250, 250],
 88         ],
 89         color: '#83ff93'
 90       },{
 91         name: '平行四边形',
 92         num: [
 93           [500, 0],
 94           [500, 250],
 95           [375, 375],
 96           [375, 125]
 97         ],
 98         color: '#ff8383'
 99       },{
100         name: '黄三角',
101         num: [
102           [375, 125],
103           [375, 375],
104           [250,250]
105         ],
106         color: '#fff56c'
107       },{
108         name: '橙黄三角',
109         num: [
110           [500, 250],
111           [500, 500],
112           [250, 500]
113         ],
114         color: '#ffb542'
115       },{
116         name: '正方形',
117         num: [
118           [250, 250],
119           [375, 375],
120           [250, 500],
121           [125, 375]
122         ],
123         color: '#f598e0'
124       },{
125         name: '紫色正方形',
126         num: [
127           [250, 500],
128           [125, 375],
129           [0, 500],
130         ],
131         color: '#c673e6'
132       }];
133       DrawLine(tangram,context);
134     }
135   </script>
136 </body>
137 
138 </html>
canvas绘制七巧板源码

 

2018-09-21  15:54:56

转载于:https://www.cnblogs.com/padding1015/p/9687038.html

相关文章:

  • WPF 一个弧形手势提示动画
  • day11 高阶函数 函数式编程
  • dubbo-consumer
  • echarts 与 百度地图bmap结合系列: 如何设置地图缩放级别和监听缩放事件
  • 洛谷P1829 [国家集训队]Crash的数字表格 / JZPTAB(莫比乌斯反演)
  • python3笔记一基础语法
  • DES/3DES(TripleDES)加密、解密测试数据
  • centos7源码安装lamp(新)
  • nginx set变量后lua无法改值
  • RabbitMQ Performance Testing Tool 性能测试工具
  • Perl检查引用类型
  • 网络七层协议
  • django中获得当前域名
  • Java编程基础24——递归练习
  • E-HPC支持多队列管理和自动伸缩
  • 【前端学习】-粗谈选择器
  • ECMAScript入门(七)--Module语法
  • gops —— Go 程序诊断分析工具
  • Median of Two Sorted Arrays
  • mysql常用命令汇总
  • python_bomb----数据类型总结
  • Python3爬取英雄联盟英雄皮肤大图
  • Rancher如何对接Ceph-RBD块存储
  • Spring Cloud Feign的两种使用姿势
  • vue-loader 源码解析系列之 selector
  • 番外篇1:在Windows环境下安装JDK
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 目录与文件属性:编写ls
  • 如何设计一个微型分布式架构?
  • 突破自己的技术思维
  • 学习使用ExpressJS 4.0中的新Router
  • 原生js练习题---第五课
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ​一些不规范的GTID使用场景
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #ifdef 的技巧用法
  • #pragma data_seg 共享数据区(转)
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • (八十八)VFL语言初步 - 实现布局
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (转)EOS中账户、钱包和密钥的关系
  • (转)h264中avc和flv数据的解析
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)winform之ListView
  • (转)负载均衡,回话保持,cookie
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明
  • .Net环境下的缓存技术介绍
  • .NET开源快速、强大、免费的电子表格组件
  • .ui文件相关