Javascript 在HTML5画布上移动时跟踪鼠标坐标的简单方法

Javascript 在HTML5画布上移动时跟踪鼠标坐标的简单方法,javascript,html,html5-canvas,Javascript,Html,Html5 Canvas,在HTML5画布上移动鼠标时,有没有一种简单的方法来获取相对鼠标坐标 我发现: function getMousePos(canvas, evt){ // get canvas position var obj = canvas; var top = 0; var left = 0; while (obj && obj.tagName != 'BODY') { top += obj.offsetTop; le

在HTML5画布上移动鼠标时,有没有一种简单的方法来获取相对鼠标坐标

我发现:

function getMousePos(canvas, evt){
    // get canvas position
    var obj = canvas;
    var top = 0;
    var left = 0;
    while (obj && obj.tagName != 'BODY') {
        top += obj.offsetTop;
        left += obj.offsetLeft;
        obj = obj.offsetParent;
    }

    // return relative mouse position
    var mouseX = evt.clientX - left + window.pageXOffset;
    var mouseY = evt.clientY - top + window.pageYOffset;
    return {
        x: mouseX,
        y: mouseY
    };
}

但对我来说似乎太重了。在使用canvas时使用框架(如Kinetic)来简化这些事情有什么原因吗?

您可以完全定位canvas,然后删除while循环

最后,若画布不移动,您可以缓存它的偏移量,然后使用缓存的值


并覆盖所有情况:如果画布将有<代码>固定< /代码>位置,则不必考虑滚动:<代码> PaXExpOffs<代码>,<代码> PaGyOffice < /代码> .< /P> < p>绝对可以定位画布,然后循环删除。

最后,若画布不移动,您可以缓存它的偏移量,然后使用缓存的值


并覆盖所有情况:如果画布将有<代码>固定< /代码>位置,则不必考虑滚动:<代码> PaXExpOffs<代码>,<代码> PaGyOffice >

< P>如果您在画布上没有使用<代码> MuMeMoo<代码>,请使用此:

$(function () { 
canvas = document.getElementById('canvas');
canvas.onmousemove = mousePos;
 });

function mousePos(e) {
    if (e.offsetX) {
        mouseX = e.offsetX;
        mouseY = e.offsetY;
    }
    else if (e.layerX) {
        mouseX = e.layerX;
        mouseY = e.layerY;
    }
}

如果您没有在画布上使用
mousemove
,请使用以下命令:

$(function () { 
canvas = document.getElementById('canvas');
canvas.onmousemove = mousePos;
 });

function mousePos(e) {
    if (e.offsetX) {
        mouseX = e.offsetX;
        mouseY = e.offsetY;
    }
    else if (e.layerX) {
        mouseX = e.layerX;
        mouseY = e.layerY;
    }
}

你发布的代码有什么特别之处?Kinetic.js有鼠标移动跟踪功能。也许您可以使用已经实现的库?在我看来,这段代码非常繁重。想象一下,如果为了检索诸如鼠标坐标或键代码之类的参数,您必须进行这样的操作!与高级语言相比,它就像汇编语言。你发布的代码有什么重呢?Kinetic.js有鼠标移动跟踪功能。也许您可以使用已经实现的库?在我看来,这段代码非常繁重。想象一下,如果为了检索诸如鼠标坐标或键代码之类的参数,您必须进行这样的操作!与高级语言相比,它就像汇编语言。