我有一个画布,我用鼠标在上面绘图,然后将绘图保存为图像。在将鼠标工具的函数坐标设置为画布坐标时,我需要一点帮助。
这是将鼠标设置到画布上的函数。
function ev_canvas(ev) {
ev._x = ev.layerX;
ev._y = ev.layerY;
var func = tool[ev.type];
if (func) {
func(ev);
}
}
如果我的画布位于左上角,则此方法有效。我需要这个函数来动态设置鼠标的交互坐标。
问题是,当我将页面设置为使用样式表时,该功能没有调整到画布的样式位置。我可以像这样从画布的坐标中减去差异,它适用于我的计算机的特定最大化分辨率。
function ev_canvas(ev) {
ev._x = ev.layerX - 760;
ev._y = ev.layerY - 130;
var func = tool[ev.type];
if (func) {
func(ev);
}
}
无论画布位于屏幕上的哪个位置,如何设置此功能才能正常工作?
编辑
这是完整的javascript:
if (window.addEventListener) {
window.addEventListener('load', function () {
var canvas, context, tool;
function init() {
canvas = document.getElementById('digisigBox');
if (!canvas) {
alert('Error: I cannot find the canvas element!');
return;
}
if (!canvas.getContext) {
alert('Error: no canvas.getContext!');
return;
}
context = canvas.getContext('2d');
if (!context) {
alert('Error: failed to getContext!');
return;
}
tool = new tool_pencil();
canvas.addEventListener('mousedown', ev_canvas, false);
canvas.addEventListener('mousemove', ev_canvas, false);
canvas.addEventListener('mouseup', ev_canvas, false);
}
function tool_pencil() {
var tool = this;
this.started = false;
this.mousedown = function (ev) {
context.beginPath();
context.moveTo(ev._x, ev._y);
tool.started = true;
};
this.mousemove = function (ev) {
if (tool.started) {
context.lineTo(ev._x, ev._y);
context.stroke();
}
};
this.mouseup = function (ev) {
if (tool.started) {
tool.mousemove(ev);
tool.started = false;
}
};
}
function ev_canvas(ev) {
ev._x = ev.clientX;
ev._y = ev.clientY;
var func = tool[ev.type];
if (func) {
func(ev);
}
}
init();
}, false);
}
这是我在视图/html中使用它的地方:
<script src="@Url.Content("~/Scripts/digisig.js")" type="text/javascript"></script>
<div id="container">
@using (Html.BeginForm("Create_Signature"))
{
<div style="margin: auto; text-align: center;">
<canvas id="digisigBox" width="400" height="200">
</canvas>
<script type="text/javascript">
function putImage() {
var canvas = document.getElementById("digisigBox");
if (canvas.getContext) {
var ctx = canvas.getContext("2d");
var myImage = canvas.toDataURL("image/png");
}
var imageElement = document.getElementById("Signature");
imageElement.value = myImage;
}
</script>
@Html.HiddenFor(x => x.Signature)
</div>
<table>
<tr>
<td>
@Html.LabelFor(x => x.FirstName)
</td>
<td>
@Html.DisplayFor(x => x.FirstName)
</td>
</tr>
<tr>
<td>
@Html.LabelFor(x => x.LastName)
</td>
<td>
@Html.DisplayFor(x => x.LastName)
</td>
</tr>
</table>
<input id="submit" onclick="putImage()" type="submit" value="Submit" />
}
</div>
它的作用是从画布上的绘图创建一个图像,然后在回发后将图像存储为 base64。我只是不确定如何让鼠标在画布上以各种分辨率工作。如果画布将位于 coords(0,0) 处,这将完美地工作,但画布可能需要在页面之间移动。