蒹葭苍沧
是的,这个单引号去掉后效果还是和原来一样
蒹葭苍沧
把你函数draw()里面的for下面的{}删了,不带{}只执行cxt.lineTo(place.p[i].x,place.p[i].y);
WANTEDss
太感谢了~
慕UI4193466
https://www.w3school.com.cn/html5/canvas_filltext.asp
使用 fillText(),在画布上写文本 "Hello world!" 和 "w3school.com.cn":
等待2062

这个地方应该 cxt.lineTo(piece.p[i].x,piece.p[i].y);
孙哈哈Y
weixin_慕用5267334
写在style里的样式影响里,style的width和height有px,window.onload里设置的宽高有加载顺序问题,最好写在标签上width='1024' height='768'。个人见解,有不同理解的可以多交流交流。
慕标2318052
在你document获取canvas节点的方法上面 加上备注:
/** @type {HTMLCanvasElement} */
慕桂英850551
canvas 宽高 只有 600 ,绘制的数据坐标里 x,y 有800, 显示区域不够 ,所以看不到。
qq_慕娘8074286
试了下,没问题喔!! 
慕仔1561325
分析的没错,context.closePath()只是闭合之前的路径,context.beginPath()才是重新开始新的路径
qq_二疯子_0
document.getElementById('canvas')你多写了个s
只要干不死就往死里干
去掉一个,
改成 piece.p[i]. y
清_醒
一个是从0开始循环,一个是从1开始循环啊
慕设计521806
function draw(nums,ctx){
ctx.beginPath();
ctx.moveTo(nums.p[0].x,nums.p[0].y);
for(var i=1;i<nums.p.legth;i++){// for(var i=1;i<nums.p.length;i++){
ctx.lineTo(nums.p[i].x,nums.p[i].y);
}
ctx.closePath();
ctx.fillStyle=nums.color;
ctx.fill();
}在上述代码中需要将nums.p.legth改为nums.p.length 单词拼写错误
和你有个猿粪
因为你画到canvas画布外了,画布外的不显示。楼上说的设置宽高就能看到了。
大黑1997
么么哒,刚想找找看有没有现成的呢
qq_佛祖也Crazy_0
i<piece.p.length
慕粉1346445690
可以的
飞尘
差不多就是这样一个,自己根尺寸算一下就好了。 主要是理解js中的方法,以后也不是画七巧板啊。
var tangram = [
{p: [{x: 0,y: 0}, {x: 400,y: 0}, {x: 200,y: 200}],color: '#caff67'},
{p: [{x: 0,y: 0}, {x: 200,y: 200}, {x: 0,y: 400}],color: '#67becf'},
{p: [{x: 400,y: 0}, {x: 400,y: 200}, {x: 300,y: 300}, {x: 300,y: 100}],color: '#ef3d61'},
{p: [{x: 300,y: 100}, {x: 300,y: 300}, {x: 200,y: 200}],color: '#f9f51a'},
{p: [{x: 200,y: 200}, {x: 300,y: 300}, {x: 200,y: 400}, {x: 100,y: 300}],color: '#a594c0'},
{p: [{x: 100,y: 300}, {x: 200,y: 400}, {x: 0,y: 400}],color: '#fa8ecc'},
{p: [{x: 400,y: 200}, {x: 400,y: 400}, {x: 200,y: 400}],color: '#f6ca29'}];
等待2062
可以显示
菜鸟工程师
我并没有去掉,但是照样可以呀
for ( var i=0;i<digit[num].length;i++) {
for (var j=0;j<digit[num][i].length;j++) {
if(digit[num][i][j] == 1){
ctx.beginPath();
ctx.arc((x+j*2*(RADIUS+1)+(RADIUS+1)),(y+i*2*(RADIUS+1)+(RADIUS+1)),RADIUS,0,2*Math.PI);
ctx.strokeStyle = "#C91523";
ctx.stroke();
ctx.fill();
ctx.closePath();
}
}
}
慕函数5127544
x坐标在每个对象里面,p应该是个数组吧,数组怎么访问p.x
慕函数5127544
因为先描边后填充的话,填充色会将描边的内侧(假设你的linewidth=5,那么内侧的2.5)会被填充色所覆盖;
后描边的话就不会出现这样的问题啦。
——在老师的Canvas绘图讲解的2-4章中有详细的讲解。
qq_虚幻的泡影_0
打开控制台,看看报什么错?
qq那些年
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>七巧板</title>
<style type="text/css">
#canvas {
border: 1px solid #ccc;
display: block;
margin: auto;
}
</style>
</head>
<body>
<canvas id="canvas" width="400" height="400"></canvas>
<script type="text/javascript">
var tangram = [
{p: [{x: 0, y: 0}, {x: 400, y: 0}, {x: 200, y: 200}], color: "#ff0f09"},
{p: [{x: 0, y: 0}, {x: 0, y: 400}, {x: 200, y: 200}], color: "#feff0a"},
{p: [{x: 0, y: 400}, {x: 200, y: 400}, {x: 100, y: 300}], color: "#ff09f7"},
{p: [{x: 100, y: 300}, {x: 200, y: 400}, {x: 300, y: 300},{x: 200, y: 200}], color: "#ffdc52"},
{p: [{x:200,y:400}, {x:400,y:400}, {x:400,y:200}], color: "#0608ff"},
{p: [{x:200,y:200}, {x:300,y:300}, {x:300,y:100}], color: "#30ff10"},
{p: [{x:300,y:300}, {x:300,y:100}, {x:400,y:0}, {x:400,y:200}], color: "#ffa41a"},
];
var canvas = document.getElementById("canvas"); // 获取canvas
var context = canvas.getContext("2d"); // 获取2d绘图环境
for (var i = 0; i < tangram.length; i++) {
draw(tangram[i], context);
}
function draw(piece, context) {
context.beginPath();
context.closePath();
context.moveTo(piece.p[0].x, piece.p[0].y);
for (var i = 0; i < piece.p.length; i++) {
context.lineTo(piece.p[i].x, piece.p[i].y);
}
context.fillStyle = piece.color;
context.fill();
}
</script>
</body>
</html>
慕粉18235447584
使用
context.moveTo(100,100);
context.lineTo(700,700);
context.lineTo(100,700);
context.lineTo(100,100);
路径才能填充颜色
追逐SUN
多了一个“}”
慕丝0963956
解决了,郁闷。。
王圣文0
webStorm