d3 js 动画呼吸应用
我希望能够创建一个以特定时间间隔围绕路径旋转的圆圈动画,并能够控制该间隔以加快/减慢速度。
我的代码目前看起来像这样。如何设置圆圈沿着圆圈路径移动 - 甚至可以让母圆圈本身“呼吸”进出
2023 年 7 月 27 日 - 当前基地
multibar d3
svg = d3.create("svg");
var circle = svg
.append("circle")
.attr("cx", 150)
.attr("cy", 75)
.attr("r", 50);
circle
.transition()
.duration(2000)
.attr('r', 75);
d3
.select("#container")
.append(() => svg.node());
var circle = svg
.append("circle")
.attr("cx", 150)
.attr("cy", 75)
.attr("r", 50);
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
能够使用此代码创建此应用程序 - 但可能需要将其设为反应组件,以便在用户单击播放按钮时显示/隐藏它。
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.13.0/d3.min.js"></script> <html> <head> <title>multibar d3</title> <script src="https://d3js.org/d3.v4.min.js" charset="utf-8"></script> <style> </style> </head> <body> <script> var width = 960; var height = 600; var margin = {top: 20, right: 5, bottom: 30, left: 20}; var svg = d3.select("body") .append("svg") .attr("width", width + margin.left + margin.right) .attr("height", height + margin.top + margin.bottom) .append("g") .attr('class', 'circleorbits') .attr("transform", "translate(" + margin.left + "," + margin.top + ")"); var originX = 200; var originY = 200; var innerCircleRadius = 40; var outerCircleRadius = 60; /* var table = svg.append("circle").attr({ cx: originX, cy: originY, r: 40, fill: "white", stroke: "black" }); */ var group = svg.append("g"); var outerCircle = svg.append("circle") .attr("cx", originX) .attr("cy", originY) .attr("opacity", 0) .attr("r", outerCircleRadius) .attr("fill", "none") .attr("stroke", "black"); //console.log("outerCircle", outerCircle); var chairOriginX = originX + ((60) * Math.sin(0)); var chairOriginY = originY - ((60) * Math.cos(0)); var pointOnOuterCircle = svg.append("circle") .attr("cx", chairOriginX) .attr("cy", chairOriginY) .attr("opacity", 0) .attr("r", 5) .attr("fill", "black"); //console.log("pointOnOuterCircle", pointOnOuterCircle); /* var chairWidth = 20; var chair = svg.append("rect").attr({ x: chairOriginX - (chairWidth / 2), y: chairOriginY - (chairWidth / 2), width: chairWidth, opacity: 0, height: 20, fill: "none", stroke: "blue" }); */ // ANIMATIONS // drawing outer circle outerCircle.transition().delay(500).duration(500).style("opacity", 1); // drawing point on outer circle pointOnOuterCircle.transition().delay(1000).duration(500).style("opacity", 1); // drawing chair on the point //chair.transition().delay(1500).duration(500).style("opacity", 1); // rotating the chair var tween = function (d, i, a) { return d3.interpolateString("rotate(0, 200, 200)", "rotate(360, 200, 200)"); } var duration = 5000; //chair.transition().delay(2000).duration(500).attrTween("transform", tween); pointOnOuterCircle.transition().delay(2000).duration(duration).attrTween("transform", tween); // fading out the intermediate objects //pointOnOuterCircle.transition().delay(4000).duration(500).style("opacity", 0); //outerCircle.transition().delay(4000).duration(500).style("opacity", 0); function newLoop(){ pointOnOuterCircle.transition().delay(2000).duration(5000).attrTween("transform", tween); } setInterval(newLoop, duration); </script> </body> </html>