У меня есть карта (фоновое изображение) на холсте и «маркеры» в некоторых городах (изображения дублируются из массива объектов и включены в холст drawImage()).Включить заголовок и href в изображениях из массива объектов
Теперь я должен включать атрибуты href и title в эти маркеры. Данные также находятся в одном массиве объектов.
код до сих пор:
var mkr = [
{markerX: 222, markerY: 9, mkrTitle: "t1", mkrAction: "http://www.google.com"},
{markerX: 210, markerY: 93, mkrTitle: "t2", mkrAction: "http://www.google.com"},
{markerX: 122, markerY: 82, mkrTitle: "t3", mkrAction: "http://www.google.com"},
{markerX: 103, markerY: 190, mkrTitle: "t4", mkrAction: "http://www.google.com"},
{markerX: 96, markerY: 209, mkrTitle: "t5", mkrAction: "http://www.google.com"},
{markerX: 122, markerY: 762, mkrTitle: "t6", mkrAction: "http://www.google.com"}
]
var x = [];
var y = [];
var title = [];
var action = [];
Object.keys(mkr).forEach(function(key) {
var valX = mkr[key]["markerX"];
var valY = mkr[key]["markerY"];
var valT = mkr[key]["mkrTitle"];
var valA = mkr[key]["mkrAction"];
x.push(valX);
y.push(valY);
title.push(valT);
action.push(valA);
var c = document.getElementById("mCanvas");
//EDIT:
var cLeft = c.offsetLeft;
var cTop = c.offsetTop;
//
var ctx = c.getContext("2d");
var img = document.getElementById("marker");
ctx.drawImage(img, val, val2);
//EDIT:
c.addEventListener('click', function(event) {
valX = event.pageX - cLeft,
valY = event.pageY - cTop;
console.log(x, y);
mkr.forEach(function(img) {
if (valY > img.top && valY < img.top + img.height && valX > img.left && valX < img.left + img.width) {
ctx.fillText = mkr.valA;
window.location.href = mkr.valA;
}
});
}, false);
});
И HTML:
<img src="img/marker.png" id="marker" style="display: none;" />
<canvas id="mCanvas" width="295" height="809"></canvas> <!-- where are the markers -->
<canvas id="mapCanvas" width="600" height="600"></canvas> <!-- where is the background image -->
я могу извлечь данные из массива, но я не могу включить их в качестве атрибутов изображения. Я намерен добавить событие клика на каждое изображение (маркеры), которое у меня есть над картой, используя данные из элемента «mkrAction».
EDIT: Как было предложено, я включил код addEventListener, чтобы попробовать его, но просто это не сработало. Ничего не происходит, ни ошибок на консоли ... Где я делаю неправильно?
Почему 'Object.keys()' на массив? 'mkr.forEach' будет достаточно – haim770
Предложение haim770 является хорошим, просто отметьте, что объект, переданный функции, будет объектом самого индекса, а не ключа. Вы также можете получить контекст холста один раз за пределами цикла. Для текста вы можете использовать fillText(). Хотя, в этом вопросе нет никакого вопроса ... – K3N
Что вы подразумеваете под «включить их в качестве атрибутов изображения»? Вы не создаете элементы HTML 'img', вы рисуете изображения на холсте. Если вы хотите отвечать на события кликов и наведения на этих маркерах (изображения, сделанные на холсте), вам нужно будет установить прослушиватели событий на холст и проверить положение указателя, чтобы увидеть, находится ли он над одним из маркеров. – Titus