私が取り組んでいるイベントコードを修正しようとしています。この特別なケースでは、svg:circle
のclick
イベントに登録できる必要があります。しかし、円をmousedown
上のz-インデックスの先頭に移動して、要素を他の要素の上にドラッグできるようにする必要もあります。イベントを中断することなく要素を前に移動
これを行う方法は、DOMから要素を取り出し、私がhttp://bl.ocks.org/eesur/4e0a69d57d3bfc8a82c2から使用しているヘルパー関数を使用して正しい場所に再度挿入することです。これを行う際の問題は、イベントチェーンが、DOMから要素を取り除いて、click
イベントの発砲を妨げているように見えることです。
誰でもこれを行うためのより良い方法を考え出すことができますが、click
が正しく点火され、ドラッグライフサイクル中のどこかでZ-インデックスを変更できるようになるのでしょうか?
この小さな例は、Z-インデックスの変更方法を示していますが、クリックイベントはコンソールで発生しません。要素を一度上にクリックすると、クリックが正しく開始されます。
d3.selectAll("circle")
.on("mousedown", function() {
d3.select(this).moveToFront();
})
.on("click", function() {
var fill = d3.select(this).style("fill");
console.log("You clicked on : " + fill);
});
d3.selection.prototype.moveToFront = function() {
return this.each(function() {
this.parentNode.appendChild(this);
});
};
.red {
fill: red;
}
.blue {
fill: blue;
}
.green {
fill: green;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.3.13/d3.min.js"></script>
<svg width="600" height="600">
<circle class="red" cx="50" cy="50" r="50" />
<circle class="blue" cx="100" cy="100" r="50" />
<circle class="green" cx="150" cy="150" r="50" />
</svg>
チャージ()'と 'selection.lower()'。 –
@GerardoFurtadoこの作業では、回答を追加していただければ幸いですが、残念ながらD3のv3を使用して解決策を見つける必要があります。しかし、レイズのコードを見ても、まったく同じ問題があるようです - https://github.com/d3/d3-selection/blob/master/src/selection/raise.js – Ian
複雑です私は私の携帯電話にいるので、今書き込むが、私が書いたこの文書をチェックして、最後のフィドルは "下"と "上げ"を使用する:http://stackoverflow.com/documentation/d3.js/2537/core- svg-concepts-in-d3-js-visualization/18029/svg-the-drawing-order#t = 20160912084737911518である。残念ながら、これはv4です。 –