【发布时间】:2017-02-16 01:19:13
【问题描述】:
这里是小提琴:http://jsfiddle.net/awguo/0fep62wr/4/
在这种情况下,我将上传一张图片,然后在其正上方绘制一个画布。
然后,我将拖动一个“区域”(记录鼠标位置),然后在画布中绘制一个矩形来表示我绘制的鼠标区域。
一切正常,除了矩形总是不完全适合我绘制的区域。
我在代码中做错了什么吗?
谢谢!
代码如下:
// get position
function getMousePos(canvas, evt) {
var rect = canvas.getBoundingClientRect();
return {
x: (evt.clientX - rect.left),
y: (evt.clientY - rect.top)
};
}
function readURL(input) {
if (input.files && input.files[0]) {
var reader = new FileReader();
reader.onload = function (e) {
$('#blah').attr('src', e.target.result);
$('#base64_output').val(e.target.result);
var $cc = $('<canvas style="cursor:crosshair;width:100%;height:100%;position:absolute;top:0;left:0">');
var cc = $cc[0];
cc.addEventListener('mousedown', function(e) {
window.mousePos1 = getMousePos(cc, e);
}, false);
cc.addEventListener('mouseup', function(e){
window.mousePos2 = getMousePos(cc, e);
var p1x = window.mousePos1.x;
var p1y = window.mousePos1.y;
var p2x = window.mousePos2.x;
var p2y = window.mousePos2.y;
if (p1x > p2x) {
var tempx = p2x;
p2x = p1x;
p1x = tempx;
}
if (p1y > p2y) {
var tempy = p2y;
p2y = p1y;
p1y = tempy;
}
var message = "area:" + p1x +',' + p1y + ',' + p2x + ',' + p2y;
$('#data_output').val(message);
// draw a preview rectangle:
var w = p2x-p1x;var h = p2y-p1y;
var ctx=cc.getContext("2d");
ctx.rect(p1x,p1y,w,h);
ctx.stroke();
}, false);
$('#wrapper').append($cc);
}
reader.readAsDataURL(input.files[0]);
}
}
$("#imgInp").change(function(){
readURL(this);
});
【问题讨论】:
标签: javascript canvas