Pourquoi ne d3.js v3 casser ma force graphique lors de la mise en œuvre de zoom lors de la v2 ne l'est pas?
J'ai une force de mise en page que j'ai créé à l'aide de d3.js
Je voudrais avoir à la fois le fonctionnement normal d'un déplaçable de la force de mise en page ainsi que la possibilité de zoomer.
J'ai copié/collé le zoom du code à partir de (http://jsfiddle.net/nrabinowitz/QMKm3/). C'est la même façon de zoomer que Mike Bostock utilise dans (http://bl.ocks.org/mbostock/3680957).
Voici mon code: http://jsfiddle.net/kM4Hs/6/
Le zoom fonctionne bien, mais je ne suis pas en mesure de sélectionner les nœuds simples dans la force de mise en page et faites-les glisser autour.
J'ai trouvé le coupable sur le fait que les deux auteurs utilisent d3.v2.js plutôt que les plus récents d3.v3.js. Lorsque je change d'importation pour la v2, il fonctionne parfaitement. Cependant, je voudrais utiliser la v3, si possible.
<script type='text/javascript' src='http://d3js.org/d3.v3.min.js'></script>
contre
<script type='text/javascript' src='http://d3js.org/d3.v2.min.js'></script>
pourquoi v3 briser la force de mise en page lors de la v2 ne fonctionne pas, et plus important encore, que puis-je faire pour le réparer?
Merci d'avance!
Vous devez vous connecter pour publier un commentaire.
Si vous parcourez le notes de version, vous verrez une explication complète de tout ce qui a changé entre la version finale de 2.x (2.10.3) et la version la plus récente, 3.2.7. En particulier, à partir de la version 3.2.2:
Donc, dans la V2, faites glisser le comportement pourrait prendre la priorité sur le comportement du zoom par l'arrêt de la propagation du zoom événements. Dans la V3, ça ne se fait plus automatiquement, vous donnant le choix de comportement qui prend la priorité, et quand.
Si vous voulez donner la faites glisser le comportement de priorité lorsque vous faites glisser les nœuds, puis vous devez stopPropagation sur les événements d'entrée tout en faisant glisser afin que ces événements ne sont pas interprétées simultanément en tant que panoramique par le comportement du zoom. L'arrêt de la propagation sur dragstart est suffisante:
Si à l'aide d'une force de mise en page, le code est:
De travail exemple:
Remarque: la combinaison de ces deux comportements signifie que le geste de l'interprétation est ambiguë et très sensible à la position. Un clic sur un cercle est interprété comme faisant glisser le cercle, tandis qu'un clic d'un pixel à l'écart pourrait être interprété comme un panoramique à l'arrière-plan. Une méthode plus solide de la combinaison de ces comportements est d'utiliser la modalité. Par exemple, si l'utilisateur maintient la touche ESPACE, en cliquant et en faisant glisser est interprété comme le panoramique, plutôt que de glisser, quel que soit le clic. Cette approche est couramment employée dans les logiciels commerciaux tels que Adobe Photoshop.
var drag
deforce.drag
au lieu ded3.behavior.drag
rect
avec lepointer-events: all;
, est-ce nécessaire pour le zoom? pouvez-vous m'indiquer les documents que l'expliquer? Je ne trouve rien à ce sujet. je vous remercie.rect
est utilisé pour capturer le zoom de l'événement, indépendamment de l'endroit où vous l'utilisez dans le svg - il de mettre un cadre autour de l'ensemble de la chose en disant "capturer les événements de la souris dans cette zone" (et qui comprend zoom).