Я делаю en event listener внутри выбранной функции, но я не могу удалить ее в функции «win». (выбранная функция реализована в setInterval, но только после вызова clearInterval) Как я могу удалить этот прослушиватель событий? Я не хочу, чтобы текст менялся после того, как я нажал.Не удается удалить eventListener
function chose() {
canvas.onmousemove = function (event) {
if (((ballPos == 1) & (event.clientX > posX1) & (event.clientX < posX1 + cupw) & (event.clientY > posY) & (event.clientY < posY + cuph)) |
((ballPos == 2) & (event.clientX > posX2) & (event.clientX < posX2 + cupw) & (event.clientY > posY) & (event.clientY < posY + cuph)) |
((ballPos == 3) & (event.clientX > posX3) & (event.clientX < posX3 + cupw) & (event.clientY > posY) & (event.clientY < posY + cuph)))
win = true;
else
win = false;
canvas.addEventListener('click', function() {
winpage(win);
}, false);
}
}
function winpage(win) {
canvas.removeEventListener('click', function() {
winpage(win);
}, false);
context.clearRect(0, 0, w, h);
context.drawImage(backGround, 0, 0, w, h);
if (win)
context.fillText("YOU WIN!!!", w/2, h/2);
else
context.fillText("YOU LOSE!!!", w/2, h/2);
}
И Лалит Кумар, и Krzysiek дают вам правильный ответ. Чтобы удалить прослушиватель событий, подпись обработчика должна быть одинаковой как в addEventListener & removeEventListener. Таким образом, вы не можете использовать анонимную функцию для создания слушателя. Вы должны использовать одну и ту же именованную функцию обработчика как в командах добавления, так и удаления. Часто используемой альтернативой является создание флага, который можно установить/отключить, чтобы указать, хотите ли вы, чтобы определенная обработка имела место или нет. – markE