2011-10-15 1 views
0

J'utilise actuellement:coordonnées de la souris sur toile sans Jquery

e.pageX - $("#canvas").offset().left 

C'est la seule chose que je me sers pour Jquery, donc je préférerais réécrire cela en utilisant simplement javascript.

Que puis-je utiliser pour remplacer cela?

+0

Je prendrais un coup d'oeil au code source jQuery, ce qu'ils utilisent dans la fonction offset. – HerrSerker

+0

Je pense que c'est 'element.offsetLeft' et' element.offsetTop'. Ils utilisent probablement toutes sortes d'autres choses. – mowwwalker

Répondre

2

La réponse fournie par N Röhler fonctionne bien que dans Internet Explorer (avec quelques bugs avant IE8 - mais je pense qu'il a gagné n'est pas un problème pour vous puisque vous utilisez un canvas et pageX), et dans Opera si le padding est 0, et dans Safari/Chrome si la largeur de la bordure est égale à 0 aussi. Dans Firefox, malheureusement, offsetX et offsetY sont indéfinis. Kaninepete, je pense que vous devriez reconsidérer, pour des raisons de simplicité, la manière d'obtenir les coordonnées de la souris par rapport à votre élément de canevas. Tout ce que vous avez à faire est de calculer la position de la toile, ce qui est une tâche assez simple en utilisant .getBoundingClientRect() (aussi, n'oubliez pas d'ajouter des offsets de défilement si nécessaire), et soustrayez-le de pageX et pageY.

+0

Je l'ai changé en: e.pageX - $ ("canvas"). GetBoundingClientRect(). Left Est-ce ce que vous vouliez dire? Cela ne fonctionne pas dans Firefox. – Kaninepete

+0

S'il vous plaît voir modifier ci-dessus sur ma réponse. –

+0

Oui, votre mise à jour devrait tout résoudre, au moins quand la cible n'a pas de bordures ou de paddings en haut et à gauche, juste un peu redondant quand 'offsetX' ou' offsetY' * est * 0 - je suppose que nous pouvons vivre avec ça. (Il suffit de mettre une virgule à la fin de la ligne définissant x, ou mettre un 'var' devant y.) (Désolé si je ne commente pas votre réponse, ma réputation est encore trop faible - halp!) – MaxArt

1
var x = e.offsetX, 
    y = e.offsetY; 

Mise à jour (encore une fois) pour (correct) Compatibilité Firefox:

var rect = e.target.getBoundingClientRect(); 
var x = e.offsetX || e.pageX - rect.left - window.scrollX, 
    y = e.offsetY || e.pageY - rect.top - window.scrollY; 
+0

+1, ne sait pas pourquoi cela n'a pas plus de votes positifs. Si vous faites défiler vers le bas sur une toile et ne prenez pas en compte le window.scrol [XY], vos coordonnées seront _wrong_. – user445786

0

Vous pouvez le remplacer par le code ci-dessous

<canvas onmouseDown="mouseDown(event)" width="500" height="500"></canvas> 


function mouseDown(e) 
{ 
    var x=e.clientX-canvas.offsetLeft; 
    var y=e.clientY-canvas.offsetTop; 
} 
Questions connexes