我開始使用 d3。還有一個(gè)問題,如何沿著填充路徑正確設(shè)置三角形動(dòng)畫?我為儀表圖創(chuàng)建了一個(gè)基礎(chǔ)并對其進(jìn)行了動(dòng)畫處理。var chart = d3.select("#speedometer");const arc = d3 .arc() .outerRadius(120) .innerRadius(90) .startAngle(-Math.PI / 2);chart .append("path") .datum({ endAngle: Math.PI / 2 }) .attr("transform", "translate(160, 180)") .attr("class", "background") .style("fill", "#495270") .attr("d", arc);const triangle = chart.append('g').attr('transform', 'translate(30, 180) rotate(90)').style('width', '100%').append("path").attr("d", "M3.937,0,7.873,14H0Z");const newAngle = (70 / 100) * Math.PI - Math.PI / 2;const foreground = chart .append("path") .datum({ endAngle: -Math.PI / 2 }) .style("fill", "rgb(50, 188, 228)") .attr("transform", "translate(160, 180)") .attr("d", arc);foreground .transition() .duration(3000) .attrTween("d", function (d) { const interpolate = d3.interpolate(d.endAngle, newAngle); return function (t) { d.endAngle = interpolate(t); return arc(d); }; });triangle .transition() .duration(3000)function pathTween(path) { const length = path.node().getTotalLength(); // Get the length of the path const r = d3.interpolate(0, length); // Set up interpolation from 0 to the path length return function (t) { const point = path.node().getPointAtLength(r(t)); // Get the next point along the path d3 .select(this) // Select the circle .attr("transform", `translate(${point.x}, ${point.y})`); };}.main-wrapper{ max-width: 80%; margin: 20px auto;}.element{ display: flex; flex-flow: column nowrap; margin-bottom: 20px; border: 1px solid rgba(0,0,0,.4); padding: 20px; border-radius: 6px;}.title{ margin-bottom: 4px; font-weight: 500;}.description{ margin-bottom: 10px; color: rgba(0,0,0,.4);}#speedometer { width: 300px; height: 300px;}canvas{ width: 100%; height: 100%;}問題是,如何將三角形鏈接到動(dòng)畫弧的邊緣,如圖所示?我知道我應(yīng)該使用tween('path'....)
d3 通過弧線制作動(dòng)畫路徑
紅糖糍粑
2023-08-24 15:37:47