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

标签 javascript jquery global-variables

我的 Canvas 里有一张 map 。 我想用鼠标指针拖动这张 map 。 我在开始时将全局变量 DragMap 设置为 false 当鼠标按下时将其设置为 true ,然后在鼠标抬起时将其设置回 false 。 对于拖动,我在处理程序中检查 mousemove 事件的全局变量值,然后 如果这是真的,我会用偏移量重新绘制 map 。

上面写的是我希望我的代码执行的操作,但它不起作用。在 mousemove 处理程序中,dragMap 变量始终为 false。当我单击并拖动此 map 时,我的控制台日志显示:

true
14 false

The first "true" occures from mousedown handler, the "falses" - from mosemove event. What am I doing wrong?

$(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.

此外,这些变量不是全局变量(窗口范围),它们是 closure scoped变量。

关于javascript - 事件处理程序之间的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25662739/

相关文章:

javascript - 简单、令人恼火的 d3.js 示例

javascript - 如何按两个属性排序 - jQuery

javascript - if 语句不起作用/Javascript/Jquery

javascript - javaScript 可以处理来自 ajax 调用的任何新添加的 DOM 元素吗

c# - WPF - 如何在 ViewModel 之间共享集合的单个实例?

python - 在递归函数中保持计数

Javascript:在没有 eval 的情况下使用函数名称从 String 调用用匿名函数编写的函数?

javascript - onclick 输入文件,仅触发一次 onChange 事件

javascript - meteor 如何在电子邮件中发送HTML正文?

c++在命名空间中共享变量时出现重复符号链接(symbolic link)器错误