canvas练习 - 七巧板绘制

用到的方法:

注意点:
- stokeStyle等样式要在stroke前边
- 如果最后只有一个stroke或者fill,那么只填充最后一次路径的,之前的也会画出来但是没有填充看不到。所以每次begin+close Path后要fill或者stroke
<!DOCTYPE html>
<html lang="en"> <head>
<meta charset="UTF-8">
<meta name="author" content="xing.org1^">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>canvas画七巧板</title>
<style>
/*
* @Author: guojufeng@
* @Date: 2018-09-18 12:23:44
*/
body{
background: #fff;
}
canvas {
margin: 0 auto;
cursor: pointer;
border: 1px solid #eee;
}
</style>
</head> <body>
<canvas id="canvas" width="500" height="500">
您的浏览器不支持canvas,请更换
</canvas>
<script>
// function DrawLine(arr) {
// /* 之前这种写法,以为要一个moveTo一个lineTo的,后来发现moveTo一个开头就行了,剩下的就是lineTo一直走,且最后一个可以不闭合,就是最后一个lineTo可以不回到点上,这样的形状不闭合 */
// for (var i = 0; i < arr.length; i++) {
// context.moveTo(arr[i][0], arr[i][1]);
// if (i == arr.length - 1) { //最后一个点
// context.lineTo(arr[0][0], arr[0][1]);
// } else {
// context.lineTo(arr[i + 1][0], arr[i + 1][1]);
// }
// }
// }
function DrawLine(arr,context) {
for(var d = 0; d < arr.length; d++){
var inArr = arr[d]['num'];
context.beginPath();
context.moveTo(inArr[0][0], inArr[0][1]);
/* 如果只是填充颜色,可以不管最后一个lineTo的点要回到圆点的事情。
context.moveTo(inArr[0][0], inArr[0][1]);
for (var i = 0; i < inArr.length; i++) {
context.lineTo(inArr[i][0], inArr[i][1]);
}
context.strokeStyle = arr[d]['color']; //填充颜色
context.stroke();
*/
/* 为了闭合图形(画线情况),你也可以判断最后一个点时,让他回到初始值。如下: */
for (var i = 0; i < inArr.length; i++) {
if (i == inArr.length-1) { //最后一个点
context.lineTo(inArr[0][0], inArr[0][1]);
} else {
context.lineTo(inArr[i+1][0], inArr[i+1][1]);
}
}
context.fillStyle = arr[d]['color'];
context.fill();//每次循环也要重新画一遍
context.lineWidth = 3;
context.strokeStyle = '#333';
context.stroke();//每次循环也要重新画一遍
}
} window.onload = function(){
var myCanvas = document.getElementById('canvas');
var context = myCanvas.getContext('2d');
var tangram = [{
name: '等腰三角形蓝',
num: [
[0, 0],
[250, 250],
[0, 500]
],
color: '#62d2ff'
},{
name: '等腰三角形绿',
num: [
[0, 0],
[500, 0],
[250, 250],
],
color: '#83ff93'
},{
name: '平行四边形',
num: [
[500, 0],
[500, 250],
[375, 375],
[375, 125]
],
color: '#ff8383'
},{
name: '黄三角',
num: [
[375, 125],
[375, 375],
[250,250]
],
color: '#fff56c'
},{
name: '橙黄三角',
num: [
[500, 250],
[500, 500],
[250, 500]
],
color: '#ffb542'
},{
name: '正方形',
num: [
[250, 250],
[375, 375],
[250, 500],
[125, 375]
],
color: '#f598e0'
},{
name: '紫色正方形',
num: [
[250, 500],
[125, 375],
[0, 500],
],
color: '#c673e6'
}];
DrawLine(tangram,context);
}
</script>
</body> </html>
canvas绘制七巧板源码
2018-09-21 15:54:56
canvas练习 - 七巧板绘制的更多相关文章
- -_-#【Canvas】导出在<canvas>元素上绘制的图像
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- Canvas 中drawImage 绘制不出图片
在使用Canvas的drawImage绘制图片时,却发现绘制不出图片,原因是图片是异步加载,图片加载完再绘制. //html <img src="1.png" /> & ...
- canvas实现七巧板图案和粒子时钟
canvas实现七巧板 <canvas id="canvas" width="800" height="800"></ ...
- canvas教程(二) 绘制直线
经过 canvas 教程(一) 简介 我们知道了 canvas 的一些基本情况 而本次是给大家带来直线的绘制 canvas 中,基本图形有两种,一种是直线,还有一种是曲线 但是无论是直线还是曲线,我们 ...
- canvas教程(三) 绘制曲线
经过 canvas 教程(二) 绘制直线 我们知道了 canvas 的直线是怎么绘制的 而本次是给大家带来曲线相关的绘制 绘制圆形 在 canvas 中我们可以使用 arc 方法画一个圆 contex ...
- Android中使用Canvas和Paint绘制一个安卓机器人
场景 在Android中画笔使用Paint类,画布使用Canvas类来表示. 绘图的基本步骤 首先编写一个继承自View的自定义View类,然后重写其onDraw方法,最后把自定义的view添加到ac ...
- 基础canvas应用-钟表绘制
首先,canvas语法基础薄弱的小伙伴请点这里,剩下的小伙伴们可以接着往下看了. 一个表,需要画什么出来呢:3条线(时分秒针),1个圆(表盘),以及60条短线/点(刻度). 嗯,没毛病. 那接下来让我 ...
- Android Canvas使用drawBitmap绘制图片
1.基本的绘制图片方法 //Bitmap:图片对象,left:偏移左边的位置,top: 偏移顶部的位置 drawBitmap(Bitmap bitmap, float left, float top, ...
- android中Canvas使用drawBitmap绘制图片
1.主要的绘制图片方法 //Bitmap:图片对象,left:偏移左边的位置,top: 偏移顶部的位置 drawBitmap(Bitmap bitmap, float left, float ...
随机推荐
- POJ 3126 --Father Christmas flymouse【scc缩点构图 && SPFA求最长路】
Father Christmas flymouse Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 3007 Accep ...
- 管道符和作业控制 shell变量 环境变量配置文件
8.6 管道符和作业控制 8.7/8.8 shell变量 8.9 环境变量配置文件 管道符和作业控制 管道符:表示把一个文件的输出内容传送到后面的命令 grep 用来过滤指定关键词的命令 “|” 为 ...
- git忽略已添加版本控制的文件
今天使用git做maven项目的版本控制,刚开始搭建项目后,把所有文件全部提交了. 已经提交的文件,gitignore中后配置也无效了. 所以使用以下命令来操作,操作后要提交哦. 1.执行 git r ...
- XCode 5资源文件不自动更新问题
在xcode 5中的build settings ->build options ->Scan all source files and Includes设置为YES即可!
- php脚本超时 结束执行代码
函数:stream_context_create ,file_get_content 创建并返回一个文本数据流并应用各种选项,可用于fopen(),file_get_contents()等过程的超时设 ...
- vuex在页面中以对象展开运算符形式引入报错解决
当页面中以mapGetters等对象扩展运算符写的时候,会报错 unexpected token 解决如下: babel还要加插件才能解释这个写法 npm install --save-dev bab ...
- Vue slot简单理解
情形一: 子组件定义了具名的slot,父组件使用具名的slot,slot显示顺序为子组件定义slot的顺序 子组件: Vue.component('child',{ template:`<div ...
- python使用paramiko自动化部署linux程序
使用paramiko模块,比os模块和command模块更加的兼容各种环境.后面两个只能在服务器本机 执行,此模块写得python文件无论是在本地还是服务器本身上运行,都能兼容. paramiko模块 ...
- scrapy 元素的相对xpath
- Connect to a ROS Network---2
原创博文:转载请标明出处(周学伟):http://www.cnblogs.com/zxouxuewei/tag/ 一.Introduction ROS网络由单个ROS主机和多个ROS节点组成. ROS ...