我在畫布上放置了一個地圖(背景圖像),在某些城市放置了「標記」(從對象數組中複製圖像並通過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」項目中的數據在地圖上添加每個圖像(標記)上的點擊事件。
編輯: 至於建議,我已經包括的addEventListener代碼嘗試,但根本沒用。沒有任何反應,在控制檯上都沒有錯誤......我在哪裏做錯了?
爲什麼使用'Object.keys()'陣列上? 'mkr.forEach'就足夠了 – haim770
haim770的建議是一個很好的建議,只要注意傳遞給函數的對象將是索引本身的對象而不是關鍵。您也可以在循環外部獲取一次畫布上下文。對於文本你可以使用fillText()。雖然在問題中沒有真正的問題...... – K3N
「將它們包含爲圖像屬性」是什麼意思?您不是在創建HTML'img'元素,而是在畫布上繪製圖像。 如果您想要對這些標記(畫布上繪製的圖像)上的單擊和懸停事件作出響應,您必須將事件偵聽器設置爲畫布並檢查指針位置以查看它是否位於某個標記之上。 – Titus