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 ...
随机推荐
- 通过tarball形式安装HBASE Cluster(CDH5.0.2)——HBASE 真分布式集群配置
一.应该先配置好zookeeper并成功启动,否则hbase无法启动 二.配置HBASE集群 1,配置hbase-env.sh,下面是最少配置项目 [hadoop@zk1 conf]$ vim hba ...
- GCT之数学公式(平面解析几何)
- ARC介绍
从Ray Wenderlich的教程中截取了一小段作为对objective c中ARC的介绍,讲得比较清晰,原文有丰富的例子,见此 它是怎么工作的 你大概已经熟悉如何手工管理内存了, 就像这样:如果你 ...
- Node.js静态文件服务器实战[转]
p.s. 在下面这篇文章的指导下,做了一个静态文件服务器,见:https://github.com/walkerwzy/node_static_server ==== 这是一篇阐述得比较详细的文章,从 ...
- 【CTR】各公司方法
LR + 海量高纬离散特征 GBDT + 少量低纬连续特征 (Yahoo & Bing) GBDT + LR (FaceBook) FM + DNN (百度凤巢) MLR (阿里妈妈) FTR ...
- Node.js之接收前台数据实例
<form class="form-horizontal" method="post" action="http:127.0.0.1:3000/ ...
- 各大公司Java面试题超详细总结
ThreadLocal(线程变量副本)Synchronized实现内存共享,ThreadLocal为每个线程维护一个本地变量.采用空间换时间,它用于线程间的数据隔离,为每一个使用该变量的线程提供一个副 ...
- 开发kendo-ui弹窗组件
摘要: kendo-ui中只是提供了windwo插件,并没有提供页内弹窗插件.现在分享项目中自己定制的基于window组件的弹窗插件,如果你的项目也是用的kendo-ui,只需要将组件代码引到项目中即 ...
- [Arch] 02. Design principle and Software Pattern
Ref: 软件设计的七大原则 有时间的话,还需进一步深入理解. Figure, 重要的前五个原则 单一职责原则 (Simple responsibility pinciple SRP) 类的设计趋向于 ...
- java图片裁剪和java生成缩略图
一.缩略图 在浏览相冊的时候.可能须要生成相应的缩略图. 直接上代码: public class ImageUtil { private Logger log = LoggerFactory.getL ...