自動水平マージンを使用してページの中央に配置されたキャンバスで、マウスダウンイベントの x および y 位置を正しく取得できない理由を理解しようとしているときに、解決策以外のすべてを試みました。
現在:
- キャンバス自体だけでなく、キャンバスの親にも相対的な位置を設定しています。
- マウスイベント .pageX & .pageY からオフセット左とオフセットトップを差し引いています
私の目標は、ユーザーが strokeRect をキャンバスにドラッグするスポット (マウスダウン) を返すことです。私はそれがcssの問題だと思っていますが、困惑しています。
body, header, aside, footer, div, canvas{
display: block;
position: relative;
}
canvas {
z-index: 99;
background: #996;
}
#canvas-contain{
height: 600px;
width: 967px;
margin: 50px auto;
box-shadow: 0px 0px 5px 1px #222222;
}
<script>
rect.startX = e.pageX - this.offsetLeft;
rect.startY = e.pageY - this.offsetTop;
function mouseMove(e) {
if (drag) {
rect.w = (e.pageX - this.offsetLeft) - rect.startX;
rect.h = (e.pageY - this.offsetTop) - rect.startY ;
context.clearRect(0,0,canvas.width,canvas.height);
draw();
}
}
function draw() {
context.strokeRect(rect.startX, rect.startY, rect.w, rect.h);
}
</script>
<body>
<div id="ramRod">
<div id="canvas-contain">
<canvas id="canvas" height="600" width="967"></canvas>
</div>
<footer id="footer">
<div id="left-fb" class="foot-box"></div>
<div id="right-fb" class="foot-box"></div>
</footer>
</div>
</body>