0
我工作的拖放使用d3js下降SVG。有兩個問題,我認爲它們是相互關聯的。D3js拖放一個對象並檢測它被丟棄的位置。
當圓圈被丟棄時,它必須檢測到它被放到矩形中。我看過的一些例子使用鼠標的x和y座標,但我不完全理解它。
的另一個問題是,圓圈顯示矩形後面。有沒有辦法把它帶到前面時,圓圈中移動不改變,其中圓,矩形創建即順序(先矩形創建圈子)。
var width = window.innerWidth,
height = window.innerHeight;
var drag = d3.behavior.drag()
.on("dragstart", dragstarted)
.on("drag", dragged)
.on("dragend", dragended);
//create circle and space evenly
var svg = d3.select("body")
.append("svg")
.attr("width", width)
.attr("height", height);
var circle = d3.select("svg")
.append("circle")
.attr("cx", 50)
.attr("cy", 30)
.attr("r", 15)
.attr("transform", "translate(0,0)")
.style("stroke", "black")
.call(drag);
function dragstarted(d) {
d3.event.sourceEvent.stopPropagation();
}
function dragged(d) {
d3.select(this).attr("transform", "translate(" + [d3.event.x, d3.event.y] + ")");
}
function dragended(d) {
d3.event.sourceEvent.stopPropagation();
// here would be some way to detect if the circle is dropped inside the rect.
}
var ellipse = svg.append("rect")
.attr("x", 150)
.attr("y", 50)
.attr("width", 50)
.attr("height", 140)
.attr("fill", "green");
<script src="https://d3js.org/d3.v3.min.js"></script>
任何幫助表示讚賞。
謝謝你的迴應。我一直在尋找一種不涉及邊界框的解決方案,因爲我只有一個矩形,並且這些項目被放入矩形中。 [鏈接](http://bl.ocks.org/jmuyskens/8993967)。像這樣的東西,當這些框被拖動時,它會根據是否有頂部元素變成紅色。 – ben
@ben我更新了我的代碼和[JS小提琴](https://jsfiddle.net/heybignick/a0447ah2/7/)遍歷任意數量的矩形。 – Nick