【发布时间】:2014-11-10 21:33:39
【问题描述】:
我是一名 JavaScript 初学者,想创建我的第一个网站。
我有一个矩形,我想用鼠标在这个矩形内再画一个。
var canvas = document.getElementById("myCanvas");
var context = canvas.getContext("2d");
context.rect(0, 20, canvas.width, 50);
context.fillStyle = "blue";
context.fill();
var canvasOffset;
var offsetX;
var startX
canvasOffset = $("#myCanvas").offset();
offsetX = canvasOffset.left;
canvas.addEventListener("mousedown", function() {
canvas.style.cursor = "ew-resize";
startX = parseInt(event.clientX - offsetX);
document.getElementById("info").innerHTML = "X position: " + startX;
});
canvas.addEventListener("mouseup", function() {
canvas.style.cursor = "default";
var mouseX = parseInt(event.clientX - offsetX);
context.beginPath();
context.rect(startX, 20, mouseX - startX, 50);
context.fillStyle = "red";
context.fill();
document.getElementById("info").innerHTML = "X old: " + startX + " - X new :" + (mouseX) + " - Length: " + (mouseX - startX);
});
body {
background-color: ivory;
}
header {
background-color: black;
color: white;
text-align: center;
padding: 5px;
}
section {
text-align: center;
background-color: green;
width: 80%;
margin-left: auto;
margin-right: auto;
padding: 10px;
}
footer {
background-color: black;
color: white;
clear: both;
text-align: center;
padding: 5px;
}
canvas {
margin-left: auto;
margin-right: auto;
display: block;
width: 80%;
height: 90px;
border: 1px solid;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<header>
<h1></h1>
</header>
<section>
<canvas id="myCanvas">Your browser does not support the HTML5 canvas tag.</canvas>
<p id="info"></p>
</section>
<footer>David Kester</footer>
如果你尝试蓝色矩形,你就会明白我想要什么。问题是如果我们单击到释放鼠标的位置,新的矩形将不会被绘制。它有一个偏移量。
我不知道是什么问题,可能是偏移量和坐标的问题。但我已经尝试过其他人的实现,但它不适用于我。
难道是我在搞乱像素和非像素?在 CSS 中我有像素。
【问题讨论】:
-
尝试使用开源库来轻松进入 JavaScript,例如 KineticJS
-
这里有一个线索:jsfiddle.net/1mca6xqq/1 当你点击时,它开始绘制,我认为你的偏移量是关闭的
-
这可能是因为您将宽度用作百分比...这会稍微偏移画布中的绘图
-
我使用百分比是因为希望网站在每个屏幕上都能正常工作。这是一种好方法吗?
标签: javascript jquery html css canvas