gpt4 book ai didi

javascript - D3 js六边形进度动画起点

转载 作者:太空宇宙 更新时间:2023-11-04 15:34:27 25 4
gpt4 key购买 nike

我想寻求帮助如何设置正在进行的动画中的六边形形状的起点。根据我的屏幕截图,我的问题是我的代码始终从六边形形状的前半部分开始。

我尝试更改我的六边形数据,但问题仍然不在动画的正确起点。

您可以检查下面我的代码有什么问题。提前致谢。

enter image description here

<html>
<head>
<title>Demo</title>

</head>
<body>
<div id="animation"></div>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.10/d3.min.js"></script>

<script>
/*https://codepen.io/MarcBT/pen/wcLCe/*/
var h = (Math.sqrt(3)/2.2),
radius = 100,
xp = 200,
yp = 200,



hexagonData = [


{ "x": (radius/2+xp) , "y": (-radius*h+yp)},
{ "x": -radius/2+xp, "y": -radius*h+yp},
{ "x": -radius+xp, "y": yp},
{ "x": -radius/2+xp, "y": radius*h+yp},
{ "x": radius/2+xp, "y": radius*h+yp},
{ "x": radius+xp, "y": yp},
];



drawHexagon =
d3.svg.line()
.x(function(d) { return d.x; })
.y(function(d) { return d.y; })
.interpolate("cardinal-closed")
.tension(".1")


var svgContainer =
d3.select("body")
.append("svg")
.attr("width", 600)
.attr("height", 600);



var svgContainer = d3.select("#animation") //create container
.append("svg")
.attr("width", 1000)
.attr("height", 1000);

var path = svgContainer.append('path')
.attr('d', drawHexagon(hexagonData))
//.attr('d',line(pointData))
.attr('stroke', "#E2E2E1")
.attr('stroke-width', '4')
.attr('fill', 'none');





var totalLength = path.node().getTotalLength();
var percent = 100;

console.log(totalLength);
path
.attr("stroke-dasharray", totalLength + " " + totalLength)
.attr("stroke-dashoffset", totalLength)
//.transition()
//.duration(2000)
//.ease("linear")
.attr("stroke-dashoffset",0);



var path1 = svgContainer.append('path')
.attr('d', drawHexagon(hexagonData))
.attr('stroke', "green")
.attr('stroke-width', '4')
.attr('fill', 'none');

var totalLength = path1.node().getTotalLength();
var percent = -30;

//console.log(totalLength);
path1
.attr("stroke-dasharray", totalLength + " " + totalLength)
.attr("stroke-dashoffset",totalLength )
// .attr("fill", "rgba(255,0,0,0.4)")
.transition()
.duration(2000)

.attr("stroke-dashoffset", ((100 - percent)/100) *totalLength)








</script>
</body>
</html>

最佳答案

这是您想要做的事情的 fiddle :https://jsfiddle.net/udsnbb5m/2/

动画从六边形的第一个点开始。然而你的点不是六边形的顶点。您可以这样更改:

  d3.svg.line()
.x(function(d) { return d.x; })
.y(function(d) { return d.y; })
.interpolate("cardinal-closed")
.tension("0.90") // Previously 0.1

好的,动画正常开始了。

现在我们必须更改六边形的方向。您可以直接修改点坐标。 (我就是这么做的)

 hexagonData = [

{ "x": xp, "y": -radius+yp}, //5
{ "x": -radius*h+xp , "y": -radius/2+yp}, //4
{ "x": (-radius*h+xp) , "y": (radius/2+yp)}, //3
{ "x": xp , "y": radius+yp}, //2
{ "x": radius*h+xp , "y": radius/2+yp}, //1
{ "x": radius*h+xp , "y": -radius/2+yp}, //6

];

请注意,您可能可以使用此属性来做到这一点:

.attr('transform','rotate(-45)');

关于javascript - D3 js六边形进度动画起点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44516041/

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