D3.js: Position des info-bulles à l'aide de l'élément de position, pas la position de la souris?
Je suis en utilisant D3 pour dessiner un graphique en nuage de points. Je voudrais afficher les info-bulles lorsque l'utilisateur passe la souris sur chaque cercle.
Mon problème est que je peux ajouter des info-bulles, mais ils sont positionnées à l'aide de la souris événement d3.event.pageX
et d3.event.pageY
, de sorte qu'ils ne sont pas positionnés de façon constante au cours de chaque cercle.
Au lieu de cela, certains sont un peu à gauche du cercle, certains à droite, ça dépend de comment l'utilisateur de la souris entre dans le cercle.
C'est mon code:
circles
.on("mouseover", function(d) {
tooltip.html(d)
.style("left", (d3.event.pageX) + "px")
.style("top", (d3.event.pageY - 28) + "px");
})
.on("mouseout", function(d) {
tooltip.transition().duration(500).style("opacity", 0);
});
Et est un JSFiddle montrant le problème: http://jsfiddle.net/WLYUY/5/
Est-il une manière que je peux utiliser le centre du cercle lui-même que la position d'orienter l'info-bulle, pas la position de la souris?
- Si vous êtes ok avec tout type d'info-bulle, cette réponse devrait aider.
- Merci! Je préfère l'utiliser pur D3 info-bulles plutôt que tipsy, si possible.
Vous devez vous connecter pour publier un commentaire.
Dans votre cas particulier, vous pouvez tout simplement utiliser
d
à la position de l'info-bulle, c'est à direPour rendre tout ceci un peu plus général, vous pouvez sélectionner l'élément qui est en cours on passe la souris dessus et obtenir ses coordonnées à la position de l'info-bulle, c'est à dire
d3.select(this).attr("cx")
ne fonctionne que si le<body>
et<svg>
éléments ont le même positionnement. Voir jsfiddle.net/WLYUY/6Trouvé quelque chose ici qui pourrait répondre à votre problème, même si
<body>
et<svg>
ont différentes de positionnement. C'est en supposant que vous avezabsolute
position pour votre info-bulle.Je suis nouveau sur D3 si cela peut ne pas fonctionner pour les nuages de points... mais cela semble fonctionner pour les graphiques à barres... où v1 et v2 sont les valeurs tracées.. et il semble chercher la valeur dans le tableau de données.