У меня есть этот код, который перетаскивает мяч вокруг холста при щелчке и перетаскивании.Удаление обратного вызова функции-обертки с removeEventListener
canvas.addEventListener('mousedown', function() {
var initialClickX = mouse.x;
var initialClickY = mouse.y;
var initialBallX = ball.x;
var initialBallY = ball.y;
canvas.addEventListener('mousemove', function() {
onMouseMove(initialClickX, initialClickY, mouse.x, mouse.y, initialBallX, initialBallY)
}, false);
}, false);
function onMouseMove(initialClickX, initialClickY, mouseX, mouseY, initialBallX, initialBallY){
ball.x = mouseX + initialBallX - initialClickX;
ball.y = mouseY + initialBallY - initialClickY;
draw();
}
Проблема в том, что я не могу заставить мяч прекратить перетаскивание, когда я нажимаю. Я знаю, что мне нужно добавить:
canvas.removeEventListener('mousemove', function() {
onMouseMove(initialClickX, initialClickY, mouse.x, mouse.y, initialBallX, initialBallY)
}, false);
Но так как функция находится в обертке выше не имеет никакого эффекта, и мяч застревает в мой курсор. Может ли кто-нибудь предложить способ обойти это?
Сделать фактическую именованную функцию, содержащую код вашего слушателя. Затем используйте 'canvas.addEventListener (« mousemove », functionReference, false);' и позже 'canvas.removeEventListener (« mousemove », functionReference);'. Таким образом, у вас будет нечто вроде 'var functionReference = function() {onMouseMove (initialClickX, initialClickY, mouse.x, mouse.y, initialBallX, initialBallY); }; ' – Ian