我有一个画布,我用它来用鼠标画画然后将图形保存为图像。我需要一点帮助,将鼠标工具的功能坐标设置为画布'坐标的坐标。
这是将鼠标设置为画布的功能。
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);
}
这是我在view / 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),这将完美地工作,但画布可能需要在页面之间移动。