JavaScript-将鼠标X和Y位置存储在变量中,并在移动鼠标时不断更新它们

时间:2013-03-06 13:10:38

标签: javascript html5-canvas coordinates kineticjs mousemove

我有一个HTML5画布,显示了许多图像。其中一些图像是可拖动的,有些则不是。我已经使用KineticJS库的本地副本添加了可拖动功能(我使用本地副本,因为我想稍微编辑一两个函数)。

我现在要做的是创建一些JS变量来存储光标当前位置时的任何位置。我希望能够这样做的原因是,当用户拖动其中一个可拖动图像时,我可以检测光标的位置,并检查它们是否已将其拖动到正确的位置。

我已经编写了以下函数来执行此操作:

function getMousePosition(mouseX, mouseY){
    mouseX = e.clientX;
    mouseY = e.clientY;
    console.log("mouseX = " + mouseX);
    console.log("mouseY = " + mouseY);
}

我在KineticJS _mousemove函数中调用了这个函数,所以这个函数现在看起来像这样:

_mousemove: function(evt) {
    this._setUserPosition(evt);
    var dd = Kinetic.DD;
    var obj = this.getIntersection(this.getUserPosition());
    getMousePostion(mouseX, mouseY);

    if(obj) {
        var shape = obj.shape;
        if(shape) {
            if((!dd || !dd.moving) && obj.pixel[3] === 255 && (!this.targetShape || this.targetShape._id !== shape._id)) {
                if(this.targetShape) {
                    this.targetShape._handleEvent('mouseout', evt, shape);
                    this.targetShape._handleEvent('mouseleave', evt, shape);
                }
                shape._handleEvent('mouseover', evt, this.targetShape);
                shape._handleEvent('mouseenter', evt, this.targetShape);
                this.targetShape = shape;
            }
            else {
                shape._handleEvent('mousemove', evt);
            }
        }
    }
    /*
     * if no shape was detected, clear target shape and try
     * to run mouseout from previous target shape
     */
    else if(this.targetShape && (!dd || !dd.moving)) {
        this.targetShape._handleEvent('mouseout', evt);
        this.targetShape._handleEvent('mouseleave', evt);
        this.targetShape = null;
    }

    // start drag and drop
    if(dd) {
        dd._startDrag(evt);
    }
}

我遇到的问题是,当我在浏览器中查看我的页面并将光标移到画布上时,我得到了Firebug控制台错误:“游标的每次移动都没有定义”getMousePostion“。其中一些错误只表示,其中一些错误旁边有一个小的“+”。

如果我展开其旁边带有“+”的错误之一,我会收到以下附加信息:

_mousemove()kinetic.js (line 3443)
evt = mousemove clientX=15, clientY=229
(?)()kinetic.js (line 3417)
evt = mousemove clientX=15, clientY=229

每个可展开的错误都会显示clientXclientY的不同数字,这表明我的功能显然是x& y光标在画布上移动时的y坐标。所以我想知道为什么我收到错误告诉我getMousePosition没有定义?

1 个答案:

答案 0 :(得分:0)

您正在尝试获取不存在的对象的属性,即e。您应该传递和事件对象,而不是将mouseXmouseY传递给函数。

//you're passing parameters that don't exist in _mousemove
function getMousePosition(mouseX, mouseY){
    mouseX = e.clientX; //and trying to use e, which doesn't exist
    mouseY = e.clientY;
    //also passed parameters aren't meant to be used as local variables like this
    console.log("mouseX = " + mouseX);
    console.log("mouseY = " + mouseY);
}

将您传递的参数更改为事件对象,并将mouseXmouseY创建为局部变量,它应该可以工作。另一个非常大的问题是在_mousemove中你正在调用函数getMousePostion。注意拼写。你忘记了'我'。

function getMousePosition(e){
    var mouseX = e.clientX;
    var mouseY = e.clientY;
    console.log("mouseX = " + mouseX);
    console.log("mouseY = " + mouseY);
}

_mousemove: function(evt) {
    ...
    getMousePosition(evt);
    ...