gpt4 book ai didi

javascript - 使用removeEventListener删除包装函数回调

转载 作者:行者123 更新时间:2023-12-02 18:36:53 25 4
gpt4 key购买 nike

我有这段代码,它可以通过单击并拖动在 Canvas 上拖动一个球。

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('mousedown', function () {
var initialClickX = mouse.x;
var initialClickY = mouse.y;
var initialBallX = ball.x;
var initialBallY = ball.y;

function wrapper() {
onMouseMove(initialClickX, initialClickY, mouse.x, mouse.y, initialBallX, initialBallY)
}

canvas.addEventListener('mousemove', wrapper, false);

// some time later
canvas.removeEventListener('mousemove', wrapper);

}, false);

关于javascript - 使用removeEventListener删除包装函数回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17239110/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com