Canvas坐标轴中的Y轴距离是X轴的两倍

如题,相信很多人在初次玩canvas的时候会出现这样的情况,跟着教程走的情况下,诶

怎么画出来的东西,不怎么对劲啊,,,ԾㅂԾ,,!!!!!先上代码

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 
 4 <head>
 5     <meta charset="UTF-8">
 6     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 7     <meta http-equiv="X-UA-Compatible" content="ie=edge">
 8     <title>Document</title>
 9     <style type="text/css">
10         * {
11             margin: 0;
12             padding: 0;
13         }
14         
15         #canvas {
16             border: 1px solid #000;
17             display: block;
18             margin: 10px auto;
19             width: 300px;
20             height: 300px;
21         }
22         #canvas2 {
23             /*border: 1px solid #000;*/
24             display: block;
25             margin: 10px auto;
26             /*width: 300px;
27             height: 300px;*/
28         }
29         #canvas3 {
30             border: 1px solid #000;
31             display: block;
32             margin: 10px auto;
33             width: 300px;
34             height: 300px;
35         }
36     </style>
37 </head>
38 
39 <body>
40     
41     <canvas id="canvas2" width="300" height="300" style="border:1px solid #d3d3d3;">
42 
43     </canvas>
44     <canvas id="canvas3"></canvas>
45     <script type="text/javascript">
46        
47 
48         var canvas2 = document.getElementById("canvas2");
49         var content2 = canvas2.getContext("2d");
50         
51         content2.beginPath();
52         // rect(x,y,width,height)
53         // 以0,0为原点,设置宽100,高100的矩形
54         content2.rect(0,0,100,100);
55         content2.stroke();
56 
57         var canvas3 = document.getElementById("canvas3");
58         var content3 = canvas3.getContext("2d");
59         
60         content3.beginPath();
61         // rect(x,y,width,height)
62         // 以0,0为原点,设置宽100,高100的矩形
63         content3.rect(0,0,100,100);
64         content3.stroke();
65 
66     </script>
67 </body>
68 
69 </html>

再上效果图

 

 

两段代码都是一样的,为什么会出现自己画的矩形,高是宽的两倍呢!!!

我在网上找了以下,发现有人是这么解释的

attr设置的height/width(比如<canvas height=100/>),是实际有多少像素;

而通过css设置的height,表示显示出来的大小,并不会影响原本的像素数。

你的css的height和真实的height不匹配的话,就会出现scale(缩放扩大)的问题


可以从我的两段代码中看出来

     <canvas id="canvas2" width="300" height="300" style="border:1px solid #d3d3d3;"></canvas>
    <canvas id="canvas3"></canvas>
我自己的写的样式是在CSS里面,而教程里的代码是直接写在canvas里面的
也就是说css定义的样式只是外观,canvas的大小还得在属性中定义。
以上

转载于:https://www.cnblogs.com/WhiteM/p/6631821.html

好的,下面是利用Canvas绘制X,Y轴,并在指定坐标处添加图形的代码示例: ```html <!DOCTYPE html> <html> <head> <title>Canvas绘制图形</title> <style> canvas{ border: 1px solid #000; } </style> </head> <body> <canvas id="canvas" width="400" height="400"></canvas> <script> var canvas = document.getElementById("canvas"); var ctx = canvas.getContext("2d"); //设置坐标系原点 ctx.translate(50,350); //绘制x ctx.beginPath(); ctx.moveTo(0,0); ctx.lineTo(300,0); ctx.stroke(); //绘制y轴 ctx.beginPath(); ctx.moveTo(0,0); ctx.lineTo(0,-300); ctx.stroke(); //绘制x箭头 ctx.beginPath(); ctx.moveTo(300,0); ctx.lineTo(290,-10); ctx.lineTo(290,10); ctx.closePath(); ctx.fill(); //绘制y轴箭头 ctx.beginPath(); ctx.moveTo(0,-300); ctx.lineTo(10,-290); ctx.lineTo(-10,-290); ctx.closePath(); ctx.fill(); //绘制x刻度 for(var i=0;i<=6;i++){ ctx.beginPath(); ctx.moveTo(i*50,0); ctx.lineTo(i*50,-10); ctx.stroke(); ctx.fillText(i*50,i*50,-20); } //绘制y轴刻度 for(var i=0;i<=6;i++){ ctx.beginPath(); ctx.moveTo(0,-i*50); ctx.lineTo(10,-i*50); ctx.stroke(); ctx.fillText(i*50,15,-i*50); } //绘制x标签 ctx.fillText("X",310,-10); //绘制y轴标签 ctx.fillText("Y",10,-310); //添加图形 ctx.beginPath(); ctx.arc(150,-150,50,0,2*Math.PI); //绘制圆形,圆心坐标为(150,-150),半径为50 ctx.fillStyle = 'red'; //填充颜色为红色 ctx.fill(); //填充图形 ctx.beginPath(); ctx.rect(200,-200,80,120); //绘制矩形,左上角坐标为(200,-200),宽为80,高为120 ctx.strokeStyle = 'blue'; //边框颜色为蓝色 ctx.lineWidth = 2; //边框宽度为2 ctx.stroke(); //绘制边框 </script> </body> </html> ``` 这段代码会绘制一个400x400的Canvas,并在坐标(150,-150)处绘制一个红色的圆形,以及在坐标(200,-200)处绘制一个蓝色的矩形。你可以将代码复制到HTML文件运行,查看效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值