我正在使用画布创建一个拖放系统。
canvas.addEventListener('mousedown', function () {
window.initialClickX = mouse.x;
window.initialClickY = mouse.y;
window.initialBallX = ball.x;
window.initialBallY = ball.y;
canvas.addEventListener('mousemove', onMouseMove, false);
}, false);
function onMouseMove(){
ball.x = mouse.x + window.initialBallX - window.initialClickX;
ball.y = mouse.y + window.initialBallY - window.initialClickY;
draw();
}
当我点击时,我需要存储初始鼠标位置和初始球位置的值,这样我就可以正确地拖动球。
上面的代码完美无缺,但我认为所有全局变量看起来都很混乱。我希望onMouseMove能够接受参数initialClickX,initialClickY,initialBallX和initialBallY。但是如何将这些参数添加到回调函数中呢?
或者,如果有更好的方法,请告诉我,谢谢。
答案 0 :(得分:4)
尝试使用包装函数来执行此操作。
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();
}
答案 1 :(得分:2)
使用包装函数存根设置参数:
canvas.addEventListener('mousemove', function() {onMouseMove(window.initialBallX, window.initialBallY, window.initialClickX, window.initialClickY); });
答案 2 :(得分:2)
以下是如何在不使用全局变量的情况下执行此操作的一个小示例:
function called() {
console.log(arguments);
}
function caller(funx) {
funx();
}
caller(called.bind(this, 'a', 'b'));
基本上,您将called
设置为一组预定义参数,在本例中为'a'
和'b'
。
所以在你的情况下它是这样的:
canvas.addEventListener('mousedown', function () {
canvas.addEventListener('mousemove',
onMouseMovebind(this, mouse.x, mouse.y, ball.x, ball.y), false);
}, false);