2017-02-11 88 views
0

我有div元素「y」和一類名爲「terrain」的圖像。下面的代碼旨在讓每當類的元素被點擊時,y和那個元素共享頂部和左邊的位置。
但是,它似乎沒有工作。解決辦法是什麼?無法指定位置偏移頂部

var lands = document.getElementsByClassName("terrain"); 
for(var i = 0; i < lands.length; i++){ 
    lands[i].onclick = function(){ 
     y.style.left = lands[i].offsetLeft; 
     y.style.top = lands[i].offsetTop; 
    }; 
} 

回答

0

你必須使用一個IIFE使得currentely迭代「地形」設置其屬性(offsetLeft,的offsetTop)爲y,它的點擊時。

希望這有助於:

var lands = document.getElementsByClassName('terrain'); 
for (var i = 0; i < lands.length; i++) { 
    (function (land) { 
    land.onclick = function() { 
     alert('left: '+land.offsetLeft+' top: '+land.offsetTop); 
     y.style.left = land.offsetLeft + 'px'; 
     y.style.top = land.offsetTop + 'px'; 
    }; 
    }) (lands[i]); 
} 
+0

不幸的是,它似乎沒有工作。 – someGuy

+0

你看到一些警報嗎?如果是,點擊處理程序的作品,但我不能測試offsetLeft/offsetTop。 – Blauharley

+0

我正在測試它 – someGuy

0

for環攪亂關閉你有(點擊處理程序中的varaible i將對所有lands相同的值時,點擊其中的一個, i的值將是lands.length,這是一個未定義的值)。這是因爲for的範圍保持不變,直到最後。您需要爲lands陣列的每個項目創建不同範圍的內容。 forEach可以acheive,像這樣:

var lands = document.getElementsByClassName("terrain"); 
Array.prototype.forEach.call(lands, function(land) { 
    land.onclick = function(){ 
     y.style.left = land.offsetLeft; 
     y.style.top = land.offsetTop; 
    }; 
}); 

由於lands(的getElementsByClassName結果)是一個陣列狀物體但不是一個陣列forEach沒有被定義,所以我們必須這樣稱呼它:Array.prototype.forEach.call。閱讀更多關於:forEach,closurecall