gpt4 book ai didi

javascript - d3.js - 带 slider 的圆形动画

转载 作者:行者123 更新时间:2023-11-28 15:47:35 24 4
gpt4 key购买 nike

我正在尝试创建一个圆圈脉冲的动画(从大到小再到大等等)。脉冲速率将由 slider 控制,有点像 this one 。但是,我不确定是否使用缩放或变换或其他方式。包含的代码是 this one 的修改,但显然是不对的。我把演示放在 jsfiddle .

<!DOCTYPE html>
<meta charset="utf-8">
<head>
<style>
.mesh {
fill: none;
stroke: #000;
stroke-width: .25px;
}
.start {
fill: brown;
stroke: brown;
}
.end {
fill: none;
stroke: steelblue;
}
</style>
</head>
<body>
<script src="http://d3js.org/d3.v3.min.js"></script>
<script>

var width = 1560,
height = 900,
radius = 10;

var p0 = [250, 200, 120],
p1 = [270, 200, 20];

var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height)
.append("g")
.call(transition, p0, p1);

svg.selectAll("circle")
.data([p0, p1])
.enter().append("circle")
.attr("class", function (d, i) {
return i ? "end" : "start";
})
.attr("cx", function (d) {
return d[0];
})
.attr("cy", function (d) {
return d[1];
})
.attr("r", function (d) {
return d[2] / 2 - .5;
});

function transition(svg, start, end) {
var center = [width / 2, height / 2],
i = d3.interpolateZoom(start, end);

svg.attr("transform", transform(start))
.transition()
.delay(250)
.duration(i.duration * 4)
.attrTween("transform", function () {
return function (t) {
return transform(i(t));
};
})
.each("end", function () {
d3.select(this).call(transition, end, start);
});

function transform(p) {
var k = height / p[2];
return "translate(" + (center[0] - p[0] * k) + "," + (center[1] - p[1] * k) + ")scale(" + k + ")";
}
}


</script>

</body>
</html>

最佳答案

如果我正确地理解了你想要做的事情,那么你就让事情变得过于复杂了。您所需要的只是一个调用自身的转换:

svg.append("circle")
.attr("cx", width/2)
.attr("cy", height/2)
.attr("r", minRadius)
.call(transition, minRadius, maxRadius);

function transition(element, start, end) {
element.transition()
.duration(duration)
.attr("r", end)
.each("end", function() { d3.select(this).call(transition, end, start); });
}

和 slider :

d3.select("body").append("input")
.attr("type", "range")
.attr("min", 500)
.attr("max", 2000)
.attr("value", duration)
.on("change", function() { duration = this.value; });

完整示例 here 。最主要的是,在转换结束时,它用相反的值初始化一个新的。

关于javascript - d3.js - 带 slider 的圆形动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21738321/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com