【发布时间】:2023-08-29 18:39:02
【问题描述】:
对于我的 Web 应用,我创建了一个 html5 画布并创建了允许我通过 mousedown、mouseup 和 mousemove 在此画布上绘图的函数:
<canvas
#canvas id="canvas"
(mousemove)="mouseMove($event)"
(mousedown)="mouseDown()"
(mouseup)="mouseUp()">
</canvas>
经过测试,我意识到这不适用于触摸屏,我需要这样的触摸事件:
document.getElementById('canvas').addEventListener('touchstart', function(event) {
})
但是我不想重做 Javascript 中的所有代码,而是仍然使用我的 Angular 函数。在这个例子中,我如何从 javascript 函数中执行 mousedown 函数:
export class PenInputComponent implements AfterViewInit {
public ngAfterViewInit(): void {
document.getElementById('canvas').addEventListener('touchstart', function(event) {
// execute mousdeDown function here
})
}
public mouseDown(): void {
this.startDrawState();
}
}
我怎样才能做到这一点,甚至有可能吗?
更新:解决方案如下:
document.getElementById('canvas').addEventListener('touchstart', (event) => {
this.mouseX = event.targetTouches[0].pageX;
})
由于可能有多个触摸事件,它是一个数组,必须相应地获取坐标,但对于 angular,您应该将其放入 canvas 标记中,如下所述。
【问题讨论】:
-
你可以使用touchStart事件吗?你有触摸事件。
-
请注意,您实际上并不需要方法的
public关键字;默认情况下它应该是公开的。 -
@Edric 之所以称为 typescript 是有原因的,所以我尽我所能打字,让我的编码风格看起来更统一
-
@Miger 你能改写你的评论吗?我不明白。
-
@Miger 之所以称为 TypeScript,是因为它有
types。 public 不是一种类型,它是一个访问修饰符。或者你认为它被称为 TypeScript 是因为你必须输入比 JS 更多的输入?大声笑
标签: javascript html angular