所以,我有一个具有属性的<img>
标签。调用一个名为 的函数onclick
,作为图像。onclick
analyze(this)
this
该analyze
函数对图像做了一些不完全相关的事情,除了它将图像绘制到<canvas>
元素上(使用drawImage
函数)。
但是现在,我还想选择我刚刚在图像中单击的颜色。我目前正在使用此处回答的方法(70 多票的答案,而不是选择的答案):如何获取鼠标在画布元素上单击的坐标?
但是,我想我可能做错了。我已经绘制了图像并调用了我的函数(并且这些函数都有效),但是没有调用颜色选择部分。我认为这是因为我实际上并没有捕捉到这个事件。这通常是我的代码的外观:
<img onclick="javascript:analyze(this);" />
function analyze(img_elem) {
// This is getting the canvas from the page and the image in it
var canvaselement = document.getElementById('canvas').getContext('2d'),
img = new Image();
img.onload = function () {
canvaselement.drawImage(img, 0, 0, 250, 250);
...
canvaselement.onClick = function () {
var coords = canvaselement.relMouseCoords(event);
pick(img, canvaselement, coords); // pass in coordinates
}
}
img.src = img_elem.src;
}
function relMouseCoords(event) {
var totalOffsetX = 0;
var totalOffsetY = 0;
var canvasX = 0;
var canvasY = 0;
var currentElement = this;
do {
totalOffsetX += currentElement.offsetLeft - currentElement.scrollLeft;
totalOffsetY += currentElement.offsetTop - currentElement.scrollTop;
}
while (currentElement = currentElement.offsetParent)
canvasX = event.pageX - totalOffsetX;
canvasY = event.pageY - totalOffsetY;
return {
x: canvasX,
y: canvasY
}
}
function pick(img, canvaselement, coords) {
var pickedColor = "";
canvaselement.drawImage(img, 0, 0, 250, 250);
xx = coords.x;
yy = coords.y;
var imgData = canvas.getImageData(xx, yy, 1, 1).data;
pickedColor = rgbToHex(imgData);
//alert(pickedColor);
return pickedColor;
}
因此,代码永远不会到达pick
函数。我有一种感觉,这是因为我实际上并没有捕捉到这个onclick
事件。我什至不确定这是否是在画布上获取坐标的正确方法,我只是希望此时我什至可以进入调试过程的那一部分。
谢谢你的帮助!