我目前正在学习画布触摸事件功能,我能够在画布上画线,现在我想在画出任何线条并在屏幕上显示时获取x和y坐标。请帮助并教我如何获取x和y值,谢谢!
这是编码
<!DOCTYPE html>
<html><head>
<style>
#contain {
width: 500px;
height: 120px;
top : 15px;
margin: 0 auto;
position: relative;
}
</style>
<script>
var canvas;
var ctx;
var lastPt=null;
var letsdraw = false;
var offX = 10, offY = 20;
function init() {
var touchzone = document.getElementById("layer1");
touchzone.addEventListener("touchmove", draw, false);
touchzone.addEventListener("touchend", end, false);
ctx = touchzone.getContext("2d");
}
function draw(e) {
e.preventDefault();
if (lastPt != null) {
ctx.beginPath();
ctx.moveTo(lastPt.x, lastPt.y);
ctx.lineTo(e.touches[0].pageX - offX,
e.touches[0].pageY - offY);
ctx.stroke();
}
lastPt = {
x: e.touches[0].pageX - offX,
y: e.touches[0].pageY - offY
};
}
function end(e) {
var touchzone = document.getElementById("layer1");
e.preventDefault();
// Terminate touch path
lastPt = null;
}
function clear_canvas_width ()
{
var s = document.getElementById ("layer1");
var w = s.width;
s.width = 10;
s.width = w;
}
</script>
</head>
<body onload="init()">
<div id="contain">
<canvas id="layer1" width="450" height="440"
style="position: absolute; left: 0; top: 0;z-index:0; border: 1px solid #ccc;"></canvas>
</div>
</body>
</html>
答案 0 :(得分:0)
仍然不完全自信我理解你的问题。
在您发布的代码中,您已经使用e.touches [0] .pageX / Y获取坐标。主要问题是pageX / Y值是相对于页面原点的。然后在代码中减去固定的offX / Y,尝试将它们转换为画布相对坐标。正确的想法,错误的价值观您需要减去canvas元素的位置,当使用offsetParent参考向上遍历树时,可以通过将offsetX / Y值相加来获得该位置。
类似的东西:
offX=0;offY=0;
node = document.getElementById ("layer1");
do {
offX += node.offsetX;
offY += node.offsetY;
node = node.offsetParent;
} while(node);
应该为offX和offY提供更好的价值。
如果您只是想在最后找到实际的绘图,那么在用户绘制时跟踪边界框将是最简单的。