2

我是JS的新手。我沒有使用jQuery,我有一個問題。我創建了一個可變數量的畫布頁面上,都有一個事件偵聽像這樣:HTML5多個Canvases事件偵聽器 - 如何確定哪個畫布遇到過該事件?

  for (i=0; i<numberOfCanvases; i++){ 
       var canv = document.createElement("canvas"); 
       canv.addEventListener('click', clickReporter, false); 
       document.body.appendChild(canv); } 

指定的監聽功能clickReporter:

 function clickReporter(e){...} 

我想使用這個功能來告訴我點擊事件相對的鼠標位置到畫布:

function getMousePos(canvas, evt){ 
// get canvas position 
var obj = canvas; 
var top = 0; 
var left = 0; 
while (obj && obj.tagName != 'BODY') { 
    top += obj.offsetTop; 
    left += obj.offsetLeft; 
    obj = obj.offsetParent; 
} 
// return relative mouse position 
var mouseX = evt.clientX - left + window.pageXOffset; 
var mouseY = evt.clientY - top + window.pageYOffset; 
return { 
    x: mouseX, 
    y: mouseY 
}; 

}

我從本教程中找到:http://www.html5canvastutorials.com/advanced/html5-canvas-mouse-coordinates/

問題是,它假設只有一個畫布,而且我確實有一個畫布列表,現在放在網頁上,但我想知道,只是給出了clickReporter()函數,是否有一種簡單的方法來確定選擇了哪個畫布?像evt.getCanvas()或evt.getParentCanvas()這樣的函數?

我這麼問是因爲當事件發生時(在許多畫布1鼠標點擊,我要創建在該位置對於僅帆布行動)

回答

2
function clickReporter(e){ 
    console.log(this); // in a eventListener , this point to the element fire the event 
    console.log(e.target); // in fireFox and webkit, e.target point to the element fire the event 
} 
+0

我最終使用'this'關鍵字。 e.target和'this'之間有什麼區別嗎?謝謝! – Rohan

+0

'''e.target'''表示一個事件對象的正確,然後'''這個'''在函數的上下文中,指的是你綁定句柄的元素,在這種情況下,它們指向相同OBJ;在另一種情況下,可能不會 –