javascript - 画布在行尾绘制箭头线
问题描述
我正在尝试在行尾创建一个箭头。我有一个起始位置和一个目标位置。画家应该在目标位置画两条线,那里有一个箭头。
在画布上绘制时,仅绘制线条。没有出现“箭头”。
控制台中没有抛出错误。有人可以告诉我这里缺少什么吗?
class Position {
constructor(x, y) {
this.x = x;
this.y = y;
}
}
$(document).ready(() => {
const canvas = $('#canvas')[0];
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
const ctx = canvas.getContext('2d');
ctx.lineWidth = 1;
ctx.font = "14px Georgia";
const arrowLength = 10;
const startPosition = new Position(50, 50);
const targetPosition = new Position(200, 200);
drawLine(ctx, startPosition, targetPosition); // PAINT LINE HERE
drawArrow(ctx, startPosition, targetPosition, 10); // PAINT ARROW HERE
});
function drawLine(ctx, startPosition, targetPosition) {
ctx.beginPath();
ctx.moveTo(startPosition.x, startPosition.y);
ctx.lineTo(targetPosition.x, targetPosition.y);
ctx.stroke();
}
function drawArrow(ctx, laneFromPosition, laneToPosition, arrowLength) {
const targetAngle = Math.atan2(laneToPosition.y - laneFromPosition.y, laneToPosition.x - laneFromPosition.x);
const tempRad = Math.Pi / 6;
const radRight = targetAngle - tempRad;
const radLeft = targetAngle + tempRad;
const targetPositionRightSideX = laneToPosition.x - arrowLength * Math.cos(radRight);
const targetPositionRightSideY = laneToPosition.y - arrowLength * Math.sin(radRight);
drawLine(ctx, laneToPosition, new Position(targetPositionRightSideX, targetPositionRightSideY));
const targetPositionLeftSideX = laneToPosition.x - arrowLength * Math.cos(radLeft);
const targetPositionLeftSideY = laneToPosition.y - arrowLength * Math.sin(radLeft);
drawLine(ctx, laneToPosition, new Position(targetPositionLeftSideX, targetPositionLeftSideY));
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<canvas id="canvas"></canvas>
解决方案
推荐阅读
- android - android状态栏在浅色主题中透明
- angular - Angular Material 自定义颜色属性/指令
- android - 如何解决此问题“java.lang.IllegalStateException:2 个内置 Robo 脚本都适用。”
- javascript - lint-staged 很好。但是 git commit 得到错误
- angular - 在父级的 ngOnDestroy 之后未调用 Angular ngOnChanges
- azure-blob-storage - 将 azure.timestamp 转换为 NiFi 表达式语言中的 NiFi 日期数据类型
- excel - 查询编辑器后将文本转换为数值(存储为文本)
- angular - 将数据服务中的 Angular HttpClient 异常传递回观察者
- excel - 如何在共享文件夹中存在的文件(不超过 5 天)中搜索字符串?
- ajax - ajax 请求后找不到类 - 10 月 cms