我看到其他類似的問題,但答案並沒有真正解決問題。刪除鼠標事件監聽器點擊
我有這樣的事件偵聽器:
function bigButton(x, y, strTxt, doFunction)
{
var getID = document.getElementById("canvas_1");
if (getID.getContext)
{
var ctx = getID.getContext("2d");
var btnW = 150;
var btnH = 50;
var cx = x - btnW/2;
var cy = y - btnH/2;
var left = cx;
var right = cx + btnW;
var top = cy;
var bottom = cy + btnH;
bbWhite(cx, cy, btnW, btnH, strTxt);
getID.addEventListener("mousemove", function bbAnim(event)
{
var mousePos = getMousePos(getID, event);
var rect = getID.getBoundingClientRect();
var mouseX = mousePos.x;
var mouseY = mousePos.y;
if (mouseX >= left
&& mouseX <= right
&& mouseY >= top
&& mouseY <= bottom)
{
bbBlack(cx, cy, btnW, btnH, strTxt);
}
else
{
bbWhite(cx, cy, btnW, btnH, strTxt);
}
}, false);
getID.addEventListener("click", function bbClick(event)
{
var mousePos = getMousePos(getID, event);
var rect = getID.getBoundingClientRect();
var clickX = mousePos.x;
var clickY = mousePos.y;
if (clickX >= left
&& clickX <= right
&& clickY >= top
&& clickY <= bottom)
{
doFunction();
}
}, false);
}
}
我想刪除它,因爲一旦我點擊它,我想清楚了畫布上,並做其他事情。然而,我必須有一個命名的函數來刪除它。據我所知,我不能不失去匿名函數中使用的所有變量。在這種情況下,我如何擁有一個命名的監聽器?這是我在學習JavaScript時遇到的第一個問題。我很驚訝這不是你在任何教程中找到的第一件事。
UPDATE:
我已經把它做成了命名函數,但我還是沒有辦法單擊該按鈕後,將其刪除(和mousemove事件)。
如果我以後不想刪除它,該怎麼辦?例如,我有一個類似的事件,我想刪除一個鼠標移動事件,但只有在點擊該按鈕後。如果我在點擊事件的處理程序中刪除它,它不再起作用。 –
我不能,那最終會回答我自己的問題。另外,從處理程序中刪除它會打破該事件。它不起作用。試圖將它從功能範圍之外移除,它甚至不知道我在說什麼。人們如何做到這一點? –
我更新了更多的上下文。如果我添加this.removeEventHandler(「mousemove」,bbClick,false);到事件功能,它會中斷。它不再有效。當我點擊它時,它不再做任何事情。按鈕鼠標懸停動畫也會發生同樣的情況。如果我嘗試刪除傳遞的doFunction()事件中的事件處理程序,它也不起作用。我希望JavaScript控制檯能告訴我更多,但它並沒有告訴我任何事情。 –