Положение мыши на холсте без библиотеки? - PullRequest
0 голосов
/ 07 марта 2012

Я искал, как найти положение мыши относительно холста, но без библиотеки JS ... не могу найти никаких примеров, кроме jquery!

Я использую это, чтобы начатьфункция:

 canvas = document.getElementById("canvas");  
 ctx = canvas.getContext("2d"); 
 canvas.addEventListener("mousedown", mousePos, false);

Но e.pageX и e.pageY зависят от положения холста.Мне нужно удалить эту проблему, чтобы математика была правильной, поэтому она основана только на канве.

Можно ли это сделать без библиотеки JS?Как я только когда-либо видел, это делается с помощью jquery, которого я стараюсь избегать как можно больше.

Ответы [ 3 ]

1 голос
/ 07 марта 2012

Я использую:

var x;
var y;
if (e.pageX || e.pageY)
{
    x = e.pageX;
    y = e.pageY;
}
else {
    x = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
    y = e.clientY + document.body.scrollTop + document.documentElement.scrollTop; 
} 
x -= gCanvasElement.offsetLeft;
y -= gCanvasElement.offsetTop;
1 голос
/ 07 марта 2012

Сначала вам нужно получить смещение элемента холста или как далеко вправо + вниз от верхнего левого угла.

Когда мышь перемещается, добавьте переменные смещения в положение мыши.

Этот код должен помочь:

var canvas = document.getElementById("canvas");


var xOff=0, yOff=0;



for(var obj = canvas; obj != null; obj = obj.offsetParent) {
    xOff += obj.scrollLeft - obj.offsetLeft;
    yOff += obj.scrollTop - obj.offsetTop;
}



canvas.addEventListener("mousemove", function(e) {

                        var x = e.x + xOff;
                        var y = e.y + yOff;


                        var ctx = canvas.getContext('2d');
                        ctx.clearRect(0, 0, 100, 100);
                        ctx.fillText(x + " - " + y, 40, 40);  

                        }, true);
1 голос
/ 07 марта 2012
var findPos = function(obj) {
    var curleft = curtop = 0;
    if (obj.offsetParent) { 
        do {
           curleft += obj.offsetLeft;
           curtop += obj.offsetTop; 
        } while (obj = obj.offsetParent);
    }
    return { x : curleft, y : curtop };
};

Получить положение элемента canvas и вычесть из него x и y.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...