Javascript 在HTML5画布上绘制线条时出现问题
尽管我将Javascript 在HTML5画布上绘制线条时出现问题,javascript,html,canvas,Javascript,Html,Canvas,尽管我将ctxt.lineWidth设置为1,但线宽似乎不是1,而且线条也是拉伸的。有人能指出我做错了什么吗 这是由于您通过CSS设置了宽度和高度。通过CSS更改宽度和高度将更改画布元素的大小,但不会更改像素密度。为此,必须直接在canvas元素上设置.width和.height属性 将onload更改为以下内容,并删除元素上的宽度和高度样式 window.onload = function() { var c = document.getElementById("myCanvas"
ctxt.lineWidth
设置为1,但线宽似乎不是1,而且线条也是拉伸的。有人能指出我做错了什么吗 这是由于您通过CSS设置了宽度和高度。通过CSS更改宽度和高度将更改画布元素的大小,但不会更改像素密度。为此,必须直接在canvas元素上设置.width
和.height
属性
将onload
更改为以下内容,并删除元素上的宽度和高度样式
window.onload = function() {
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
ctx.fillStyle = "#000000";
ctx.fillRect(0, 0, 800, 800);
drawArrow(100, 100, 100, 20, ctx);
};
function drawArrow(x, y, w, h, ctxt) {
var headWidth = 10;
ctxt.beginPath();
ctxt.strokeStyle = "#FF0";
ctxt.moveTo(x, y + (h / 2));
ctxt.lineTo(x + w, y + (h / 2));
//To Draw Arrow Head
ctxt.moveTo((x + w) - headWidth, y + (h / 2));
ctxt.lineTo((x + w) - (2 * headWidth), y);
ctxt.lineTo((x + w), y + (h / 2));
ctxt.lineTo((x + w) - (2 * headWidth), y + h);
ctxt.lineTo((x + w) - headWidth, y + (h / 2));
//To Draw Arrow Tail
ctxt.moveTo(x + (headWidth), y + (h / 2));
ctxt.lineTo(x, y);
ctxt.lineTo(x + (2 * headWidth), y + (h / 6));
ctxt.lineTo(x + (2 * headWidth), y + (h * (3 / 4)));
ctxt.lineTo(x, y + h);
ctxt.lineTo(x + headWidth, y + (h / 2));
ctxt.lineWidth = 1;
ctxt.stroke();
}
必须指定“像素之间”的坐标。例如,如果您从
[0,0]
到[10,0]
绘制一条线,您将得到一条比从[0.5,0.5]
到[10.5,0.5]
更宽的线
window.onload = function() {
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
// canvas width and height set here.
c.width = 800;
c.height = 800;
ctx.fillStyle = "#000000";
ctx.fillRect(0, 0, 800, 800);
drawArrow(100, 100, 100, 20, ctx);
};
即使您这样设置宽度和高度,它也会起作用
window.onload = function() {
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
// canvas width and height set here.
c.width = 800;
c.height = 800;
ctx.fillStyle = "#000000";
ctx.fillRect(0, 0, 800, 800);
drawArrow(100, 100, 100, 20, ctx);
};
<canvas id="myCanvas" width="800" height="800" style="border:1px solid #000000;">
</canvas>