2010-10-25 6 views
8

Comment puis-je obtenir la position d'un objet dans Raphael? Je peux obtenir la taille en utilisant getBBox(), mais il semble y avoir aucun moyen d'obtenir la position?Raphael Position

+0

Le problème peut être d'abord une définition de "position" d'un objet. Si vous voulez dire le "centre de gravité" de l'objet, cela doit être calculé par le code de l'application car cela dépend du type d'objet. À l'heure actuelle, il semble qu'il n'y ait pas de code de bibliothèque pour obtenir le centre des formes communes. Pour des formes arbitraires, je suppose qu'il est peut-être nécessaire de le définir au niveau de l'application, et la boîte englobante permet de le calculer. Si, par position, vous voulez dire la position classique du coin supérieur gauche, les attributs (x, y) de la boîte englobante sont le résultat, comme mentionné dans @b_dubb. –

Répondre

4

En fonction du type de forme, la documentation semble indiquer qu'il est possible d'y accéder à l'aide de la fonction .attr(). Donc, si c'est un cercle ...

var x = myCircle.attr('cx'); //cx is the center-x-coordinate of the circle 
var y = myCircle.attr('cy'); //same, for y 
var r = myCircle.attr('r'); //Radius of circle. 

Un carré aurait attr s de x, y, largeur, hauteur. Consultez la documentation pour plus d'informations. GetBBox() devrait vous donner la position ainsi que les propriétés x et y.

+0

el.getBBox est la bonne approche. S'il vous plaît voir la réponse de Dmitry. – jbeard4

16

var bbox = el.getBBox(); 
alert([bbox.x, bbox.y]); 
+5

merci mais ce serait génial si vous pouviez ajouter ces conseils dans la documentation de raphaeljs. – Mermoz

+6

Il se trouve dans la documentation de Raphael –

2

vous pouvez également accéder aux valeurs x et y de cette façon:

var x = myCircle.attrs.x; 
var y = myCircle.attrs.y 
7

getBBox() retourne un objet avec 5 propriétés. ils sont:

  1. x
  2. y
  3. largeur
  4. hauteur
  5. toString()

si vous définissez getBBox (false) il renverra les données de coordonnées pour la position de l'objet APRES une transformation. mettre à getBBox (true) pour retourner les coordonnées de l'objet avant la transformation

utilisation comme ça ...

paper.Raphael(10,10,300,300); 
circle.paper(30, 55, 15); 
var circleBBox = circle.getBBox(false); 

edit: viens de télécharger R 2.1 et je crois qu'il a ajouté x2 et y2 à la propriétés renvoyées par getBBox()

0

Les attributs x, y sont ceux de l'ensemble. Le problème ici est que si l'ensemble est traduit ailleurs, les x et y donnés par .getBBOx() ne tiennent pas compte de la traduction.

Raphael.transformPath (chemin, Transform) peut aider en appliquant la même que l'ensemble transforme a ...

pour traduire ce point, vous pouvez:

tp = Raphael.transformPath("M"+x+","+y, set.attr('transform')) 
x = tp[0][1] 
y = tp[0][2] 
Questions connexes