事件处理程序之间的全局变量
Global variable between event handlers
我的画布中有一张地图。我想用鼠标指针拖动这个地图。我在开始时将全局变量dragMap设置为false当鼠标放下时将其设置为true,然后当鼠标抬起时将其重新设置为false。对于拖动,我在mousemove事件和如果这是真的,我会用偏移量重新绘制地图。
上面写的是我想要我的代码做的事情,但它不起作用。在mousemove处理程序内部,dragMap变量始终为false。当我点击并绘制此地图时,我的控制台日志显示:
真的14错误
第一个"true"出现在mousedown处理程序中,"false"出现在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;
});
});
您在第三个处理程序中使用了mousedown而不是mouseup
$("#myCanvas").mouseup(function(){
dragMap = false;
});
因此,当mousedown首先发生时,标志被设置为true,然后第二个mousedown
处理程序运行,将其设置为false,因此在mousemove
处理程序中,您将获得dragMap == false
。
此外,这些变量不是Global
变量(window
作用域),它们是闭包作用域的变量。
您的绑定鼠标向下两次,
更改
$("#myCanvas").mousedown(function(){
dragMap = false;
});
至
$("#myCanvas").mouseup(function(){
dragMap = false;
});
因此,当鼠标按钮释放时,dragmap为false
$("#myCanvas").mousedown(function(){
dragMap = false;
});
代码末尾必须是鼠标悬停
$("#myCanvas").mouseup(function(){
dragMap = false;
});
相关文章:
- 函数参数中的数据与指定变量之间的任何性能差异
- 全局变量和全局对象的属性之间有什么区别吗
- delete关键字在全局变量上的不同行为
- 在javascript函数中设置全局变量
- 如何将getJson的响应保存在全局变量中
- 什么's是处理多个js文件之间交互的简单方法,同时避免溢出全局变量
- Javascript避免函数之间的全局变量
- 在两个js文件之间共享全局变量
- JS全局变量类型之间的差异
- 事件处理程序之间的全局变量
- 在JQuery多个函数之间使用全局变量
- Jquery和全局变量作用域之间的问题
- 为什么我的全局变量不携带函数之间的值
- 面板内容脚本和页面内容脚本之间的全局变量在firefox插件
- 在嵌入页面之间传递javascript全局变量,或者从main传递到embed
- 在加载到Meteor的javascript文件之间共享全局变量
- javascript中局部变量和全局变量之间的区别
- html页面之间的Javascript全局变量
- 是否可以限制全局变量仅在2个脚本文件之间共享
- 运行和控制器之间的全局变量