事件处理程序之间的全局变量

问题描述:

我的画布内有一张地图。 我想用鼠标拖动这张地图。 我将全局变量dragMap设置为false, 在鼠标关闭时将其设置为true,然后在设置为false时将其设置为false。 对于拖动我检查这个全局变量值处理器为mousemove事件和 如果它是真的,我重绘与偏移地图。事件处理程序之间的全局变量

上面写的是我想让我的代码做但它不起作用。在mousemove处理程序中,dragMap varialbe始终为false。当我点击和drad这个地图我的控制台日志显示:

 
true 
14 false 

第一个“真正的”鼠标按下从处理occures的“falses” - 从mosemove事件。 我在做什么错?

$(document).ready(function(){ 
    var dragMap = false; 
    var startDragMapX; 
    var startDragMapY; 

    $("#myCanvas").mousedown(function(e){ 
     dragMap = true; 
     startDragMapX = e.pageX; 
     startDragMapY = e.pageY; 
     console.log(dragMap); 
     //var x = e.pageX - this.offsetLeft; 
     //var y = e.pageY - this.offsetTop; 
    }); 
    $("#myCanvas").mousemove(function(e){ 
     console.log(dragMap); 
     if(dragMap) { 
      console.log(2); 
      oX = e.pageX-startDragMapX; 
      oY = e.pageY-startDragMapY; 
      draw(ctx,1,1,oX,oY); 
     } 
    });   
    $("#myCanvas").mousedown(function(){ 
     dragMap = false; 
    });  
}); 

你已经在第三处理器使用鼠标按下代替鼠标松开

$("#myCanvas").mouseup(function(){ 
    dragMap = false; 
}); 

所以,当鼠标按下首先发生的标志被设置为true,那么第二mousedown处理运行时将其设置为false,以便在mousemove处理程序你将有dragMap == false

这些变量也不是Global变量(window范围)它们是closurescoped变量。

你的绑定鼠标按下两次,

变化

$("#myCanvas").mousedown(function(){ 
    dragMap = false; 
}); 

$("#myCanvas").mouseup(function(){ 
    dragMap = false; 
}); 

所以dragmap是假的时mousebutton被释放

$("#myCanvas").mousedown(function(){ 
    dragMap = false; 
}); 

在程序结束必须be mouseup

$("#myCanvas").mouseup(function(){ 
    dragMap = false; 
});