簡體   English   中英

d3.js - 力模擬拖動不隨鼠標移動

[英]d3.js - Force simulation drag does not move with the mouse

此示例模擬看起來不錯,但拖動不起作用!

 test() function test() { var data1 ={ "nodes": [ {"id": "A"}, {"id": "B"}, {"id": "C"}, {"id":"D"}], "links": [ {"source": "A", "target": "B"}, {"source": "B", "target": "C"}, {"source": "C", "target": "A"}, {"source": "D", "target": "A"}]} var height = 250; var width = 400; var svg = d3.select("body").append("svg").attr("width",width).attr("height",height).style('border','1px solid red') var simulation1 = d3.forceSimulation().force("link", d3.forceLink().id(function(d) { return d.id; }).distance(50)).force("charge", d3.forceManyBody()).force("center", d3.forceCenter(width / 3, height / 2)); var link1 = svg.append("g").selectAll("line").data(data1.links).enter().append("line").attr("stroke","black"); var node1 = svg.append("g").selectAll("circle").data(data1.nodes).enter().append("circle").attr("r", 10).call(d3.drag().on("drag", dragged1).on("end", dragended1)).attr("fill","crimson"); simulation1.nodes(data1.nodes).on("tick", ticked1).alphaDecay(0).force("link").links(data1.links); function ticked1() { link1.attr("x1", function(d) { return d.source.x; }).attr("y1", function(d) { return d.source.y; }).attr("x2", function(d) { return d.target.x; }).attr("y2", function(d) { return d.target.y; }); node1.attr("cx", function(d) { return dx; }).attr("cy", function(d) { return dy; }); } function dragged1(d,event) { d.fx = event.x; d.fy = event.y; } function dragended1(d) { d.fx = null; d.fy = null; } }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/d3/6.7.0/d3.min.js"></script>

dragged1dragended1應該將event作為第一個參數。

 test() function test() { var data1 ={ "nodes": [ {"id": "A"}, {"id": "B"}, {"id": "C"}, {"id":"D"}], "links": [ {"source": "A", "target": "B"}, {"source": "B", "target": "C"}, {"source": "C", "target": "A"}, {"source": "D", "target": "A"}]} var height = 250; var width = 400; var svg = d3.select("body").append("svg").attr("width",width).attr("height",height).style('border','1px solid red') var simulation1 = d3.forceSimulation().force("link", d3.forceLink().id(function(d) { return d.id; }).distance(50)).force("charge", d3.forceManyBody()).force("center", d3.forceCenter(width / 3, height / 2)); var link1 = svg.append("g").selectAll("line").data(data1.links).enter().append("line").attr("stroke","black"); var node1 = svg.append("g").selectAll("circle").data(data1.nodes).enter().append("circle").attr("r", 10).call(d3.drag().on("drag", dragged1).on("end", dragended1)).attr("fill","crimson"); simulation1.nodes(data1.nodes).on("tick", ticked1).alphaDecay(0).force("link").links(data1.links); function ticked1() { link1.attr("x1", function(d) { return d.source.x; }).attr("y1", function(d) { return d.source.y; }).attr("x2", function(d) { return d.target.x; }).attr("y2", function(d) { return d.target.y; }); node1.attr("cx", function(d) { return dx; }).attr("cy", function(d) { return dy; }); } function dragged1(event,d) { d.fx = event.x; d.fy = event.y; } function dragended1(event, d) { d.fx = null; d.fy = null; } }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/d3/6.7.0/d3.min.js"></script>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM