【发布时间】:2020-11-30 00:48:55
【问题描述】:
我一直在尝试使用 D3.js 重复顺时针旋转 svg 图像中的一些齿轮,但我似乎无法理解代码或图像有什么问题。我能够使用下面的代码平移和旋转每个齿轮...
d3.selectAll(".st6")
.transition()
.delay(function(d, i, n) { return i * 50; })
.on("start", function repeat() {
d3.active(this)
.transition()
.duration(2500)
.attr('transform', 'rotate(0)')
.transition() //And rotate back again
.duration(2500)
.attr('transform' , 'rotate(90) ')
.on("start", repeat); //at end, call it again to create infinite loop
});
但是当我尝试使用为我重复旋转文本的相同代码时,图像变得静止并且不再移动......
这是为我重复旋转文本的代码...
var width = 600;
var height = 300;
var holder = d3.select("body")
.append("svg")
.attr("width", width)
.attr("height", height);
//draw the text
holder.append("text")
.style("fill", "black")
.style("font-size", "56px")
.attr("dy", ".35em")
.attr("text-anchor", "middle")
.attr("transform", "translate(300,150) rotate(0)")
.text("Hi, how r u doing");
var i = 0;
var timeInterval = 10;
setInterval(function(){
i += 1;
update(i % 360)
}, timeInterval);
var n;
// update the element
function update(n) {
// rotate the text
holder.select("text")
.attr("transform", "translate(300,150) rotate("+n+")");
}
这是我尝试复制上述方法但无济于事...
var width = 600;
var height = 300;
var holder = d3.select("body")
.append("svg")
.attr("width", width)
.attr("height", height);
holder.append("svg:image")
.attr("image-anchor", "middle")
.attr("xlink:href", "produc.svg")
.attr("transform", "translate(300,150) rotate(0)")
// Initial starting angle of the text
var i = 0;
var timeInterval = 10;
setInterval(function(){
i += 1;
update(i % 360)
},timeInterval);
var n;
// update the element
function update(n) {
// rotate the text
holder.select("text")
.attr("transform", "translate(300,150) rotate("+n+")");
}
这是 CodePenclick here 上的一个工作示例
【问题讨论】:
-
在你的更新函数中你还没有更新这一行
holder.select("text")- 你想旋转一个文本元素还是一个图像? -
我正在尝试旋转图像,但我不确定放在那里的正确内容是什么。
-
请将您的代码转成可运行的minimal reproducible example,以便我们调试并为您提供更好的答案。您可以使用可运行堆栈 sn-ps,或外部 jsFiddle/Codepen。
-
好的。我马上就做。
-
请检查codepen链接的问题
标签: d3.js svg-animate