#html5-canvas
#html5-холст
Вопрос:
В настоящее время я настроил холст и пытаюсь добавить в него несколько изображений.
Таким образом, только когда я нажимаю на холст, в том месте, где я щелкнул на холсте, появляются небольшие изображения.
Кто-нибудь может мне помочь?
Ответ №1:
Первое, что нужно иметь в виду, это то, что вам нужно будет фиксировать координаты относительно canvas, а не всей страницы, что именно вы получите из события onclick. Это довольно легко перевести с помощью такого кода, как этот:
var onMouseClick = function(evt){
var x, y;
var point = findOffset(e.target);
x = e.pageX - point.x;
y = e.pageY - point.y;
return {x,y};
}
var findOffset = function(element) {
var left = 0;
var top = 0;
if (element.offsetParent) {
do {
top = element.offsetTop;
left = element.offsetLeft;
} while(element = element.offsetParent);
return {
x : left,
y : top
};
}
};
Где ваш обратный вызов OnMouseClick возвращает объект с позицией x, y, в которой произошел щелчок в самом вашем холсте.
Далее вы захотите вставить свое изображение в этот момент. То, как вы это сделаете, будет в некоторой степени зависеть от того, где находится ваш источник изображения, но в основном это будет выглядеть так:
var canvasCtx = document.getElementById("myCanvasElement").getContext('2d');
var img = document.getElementById("id-of-an-img-tag-in-your-DOM");
canvasCtx.drawImage(img,x,y);
Если вы хотите загрузить свое изображение откуда-то помимо DOM, вы можете создать объект image самостоятельно следующим образом:
var img = new Image();
img.onload = function(){
canvasCtx.drawImage(img,x,y);
};
img.src = "url/to/your/image.jpg";
Это приведет к тому, что ваше изображение будет загружено с URL-адреса при щелчке мыши, а затем, как только изображение завершит загрузку, добавит его на ваш холст.
Комментарии:
1. «идентификатор img-тега в вашем DOM» относится к идентификатору <img> тега кого-либо в вашем HTML. Если это не то место, откуда вы получаете свое изображение, то не используйте это. Вместо этого используйте фрагмент кода «var img = new Image()» для загрузки вашего изображения с URL.
2. @BrandonDockery. Проверьте метод element.getBoundingClientRect, который является более простым способом получения смещений холста. Преимущество этого метода заключается в том, что он учитывает прокрутку. 😉
3. @markE Привет, ты знаешь, как это сделать с помощью твоего метода?
4. var BB=canvas.getBoundingClientRect(); var offsetX=BB.left; var offsetY=BB.top;
5. @Bernard, вот демонстрация использования
getBoundingClientRect
: jsfiddle.net/m1erickson/WFW47