Javascript 为什么是rе;mо;vе;电动汽车和x435;ntList和#x435;nе;r不是wо;rk?

Javascript 为什么是rе;mо;vе;电动汽车和x435;ntList和#x435;nе;r不是wо;rk?,javascript,html,html5-canvas,mouseevent,Javascript,Html,Html5 Canvas,Mouseevent,我只想在按下鼠标按钮时获得鼠标位置。 现在,当我按下鼠标时,它可以得到坐标,但当我不按下鼠标时,它不能停止 身体{ 边际:0px; 填充:0px; } 函数writeMessage(画布、消息){ var context=canvas.getContext('2d'); clearRect(0,0,canvas.width,canvas.height); context.font='18pt Calibri'; context.fillStyle='black'; 上下文。填充文本(消息,10

我只想在按下鼠标按钮时获得鼠标位置。 现在,当我按下鼠标时,它可以得到坐标,但当我不按下鼠标时,它不能停止


身体{
边际:0px;
填充:0px;
}
函数writeMessage(画布、消息){
var context=canvas.getContext('2d');
clearRect(0,0,canvas.width,canvas.height);
context.font='18pt Calibri';
context.fillStyle='black';
上下文。填充文本(消息,10,25);
}
函数getMousePos(画布,evt){
var rect=canvas.getBoundingClientRect();
返回{
x:evt.clientX-rect.left,
y:evt.clientY-rect.top
};
}
var canvas=document.getElementById('myCanvas');
var context=canvas.getContext('2d');
函数mouseUp(){
canvas.removeEventListener('mousemove',mouseDown)
//警报('44')
}
函数mouseDown(){
canvas.addEventListener('mousemove',函数(evt){
var mousePos=getMousePos(canvas,evt);
var message='鼠标位置:'+mousePos.x+','+mousePos.y;
writeMessage(画布、消息);
},假);
}

您需要完全删除AddEventListener方法中使用的相同函数。如下所示:

var newFunction = function (e){
 console.log(e);
}
document.body.addEventListener('mousemove',newFunction,false);
document.body.removeEventListener('mousemove',newFunction,false);

您需要完全删除AddEventListener方法中使用的相同函数。如下所示:

var newFunction = function (e){
 console.log(e);
}
document.body.addEventListener('mousemove',newFunction,false);
document.body.removeEventListener('mousemove',newFunction,false);

必须在
addEventListener
removeEventListener
中传递相同的参数
函数
,才能使其工作。试试这个:

函数writeMessage(画布、消息){
var context=canvas.getContext('2d');
clearRect(0,0,canvas.width,canvas.height);
context.font='18pt Calibri';
context.fillStyle='black';
上下文。填充文本(消息,10,25);
}
函数getMousePos(画布,evt){
var rect=canvas.getBoundingClientRect();
返回{
x:evt.clientX-rect.left,
y:evt.clientY-rect.top
};
}
var canvas=document.getElementById('myCanvas');
var context=canvas.getContext('2d');
//在这里创建函数
功能移动(evt){
var mousePos=getMousePos(canvas,evt);
var message='鼠标位置:'+mousePos.x+','+mousePos.y;
writeMessage(画布、消息);
}
函数mouseUp(){
//传递相同的参数
canvas.removeEventListener('mousemove',move,false)
//警报('44')
}
函数mouseDown(){
//传递相同的参数
canvas.addEventListener('mousemove',move,false);
}
正文{
背景色:3F6E6F;
边际:0px;
填充:0px;
}
帆布{
背景颜色:绿色;
}

您必须在
addEventListener
removeEventListener
中传递相同的参数
函数
,才能使其工作。试试这个:

函数writeMessage(画布、消息){
var context=canvas.getContext('2d');
clearRect(0,0,canvas.width,canvas.height);
context.font='18pt Calibri';
context.fillStyle='black';
上下文。填充文本(消息,10,25);
}
函数getMousePos(画布,evt){
var rect=canvas.getBoundingClientRect();
返回{
x:evt.clientX-rect.left,
y:evt.clientY-rect.top
};
}
var canvas=document.getElementById('myCanvas');
var context=canvas.getContext('2d');
//在这里创建函数
功能移动(evt){
var mousePos=getMousePos(canvas,evt);
var message='鼠标位置:'+mousePos.x+','+mousePos.y;
writeMessage(画布、消息);
}
函数mouseUp(){
//传递相同的参数
canvas.removeEventListener('mousemove',move,false)
//警报('44')
}
函数mouseDown(){
//传递相同的参数
canvas.addEventListener('mousemove',move,false);
}
正文{
背景色:3F6E6F;
边际:0px;
填充:0px;
}
帆布{
背景颜色:绿色;
}

编写问题时弹出的错误消息是有原因的,因此您可以实际解释问题,而不仅仅是发布大量coderemoveEventListener应该提供与回调完全相同的函数-因此将匿名函数转换为命名函数,然后,在添加和删除侦听器时,将其作为回调提供在编写问题时弹出的错误消息是有原因的,因此您可以实际解释问题,而且不仅仅是发布大量的coderemoveEventListener应该提供与回调完全相同的函数-因此,将匿名函数设置为命名函数,然后在添加和删除侦听器时将其作为回调提供