我有一个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
每个可扩展的错误对于
clientX
和clientY
显示不同的数字,这表明我的功能显然是在围绕画布移动时获取光标的x和y坐标。所以我想知道的是为什么为什么我收到错误消息,告诉我getMousePosition
未定义? 最佳答案
您正在尝试获取不存在的对象的属性,即e
。而不是将mouseX
和mouseY
传递给函数,您应该传递和事件对象。
//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);
}
将传递的参数更改为事件对象,并创建
mouseX
和mouseY
作为局部变量,它应该可以工作。另一个非常大的问题是,在_mousemove
中您正在调用函数getMousePostion
。注意拼写。您忘记了“ i”。function getMousePosition(e){
var mouseX = e.clientX;
var mouseY = e.clientY;
console.log("mouseX = " + mouseX);
console.log("mouseY = " + mouseY);
}
_mousemove: function(evt) {
...
getMousePosition(evt);
...