有没有使用mousemove事件来捕获游标碰撞的每个像素的方法?这样下面的条件会一直发生。Javascript mousemove事件触发
if(e.pageX == 100)
我发现,如果鼠标快速移动然后跳过之间的像素。但是,如果我将它慢慢就会赶上像素一个接一个。
由于
有没有使用mousemove事件来捕获游标碰撞的每个像素的方法?这样下面的条件会一直发生。Javascript mousemove事件触发
if(e.pageX == 100)
我发现,如果鼠标快速移动然后跳过之间的像素。但是,如果我将它慢慢就会赶上像素一个接一个。
由于
鼠标移动触发在每一个鼠标移动和目标是通过鼠标覆盖最上层,最嵌套元素。 当浏览器内部时间仅允许时,Mousemove,mouseover和mouseout触发。 这意味着如果快速移动鼠标,中间DOM元素和父母将被跳过。
因此,您可以移动元素而不触发鼠标移动/鼠标悬停。
您也可以从孩子通过家长移动,而不在父母任何鼠标事件的浏览器跳过中间的元素
你的唯一保证是,只要鼠标悬停被触发时,鼠标移出会触发过。
号
鼠标光标被选中,如果自上次的位置已经改变被触发mousemove
事件,但仅与新检测到的位置。
你可以做的是存储最后一次已知的鼠标位置,并计算它与当前位置之间的一条直线来完成你的计算。 这并不需要太多的代码......一个简单的方法是
// Calls `f(x, y)` for each point starting from
// `(x0, y0)` and ending in `(x1, y1)` (excluded)
// moving along an 8-connected straight path.
function processLine(x0, y0, x1, y1, f) {
var ix = x0 < x1 ? 1 : -1, dx = Math.abs(x1 - x0);
var iy = y0 < y1 ? 1 : -1, dy = Math.abs(y1 - y0);
var m = Math.max(dx, dy), cx = m >> 1, cy = m >> 1;
for (var i=0; i<m; i++) {
f(x0, y0);
if ((cx += dx) >= m) { cx -= m; x0 += ix; }
if ((cy += dy) >= m) { cy -= m; y0 += iy; }
}
}
,并可以作为
processLine(10, 20, 30, 35, function(x, y) {
console.log("x=" + x + ", y=", y);
});
你到底想达到什么目的?如果将条件更改为'> =',则可以检测边缘。看到这里:http://jsfiddle.net/e0x2mmzc/ – bluefog 2015-02-08 08:45:12