SVG 动画 - 沿线移动的增大和缩小的圆
SVG animation - growing and shrinking circle moving along line
我一直在为这个 SVG 问题苦恼,我确定这是一个属性或我遗漏的东西,但无法弄清楚
我基本上想构建一个带有圆圈的自定义加载器,该圆圈从 svg 的左侧开始并向右移动,在中间缩放,因此它从小的 0.5 比例开始,增加到 3 比例中间然后缩小到另一边的 0.5 然后重复这个,左右移动,左右移动
到目前为止,我可以让圆圈从左到右移动,我也可以缩放它,但是当我尝试组合这两种动画时,它到处都是。
https://jsfiddle.net/0odvwna4/18/
<svg width="800px" height="100px">
<circle
cx="0"
cy="50"
r="15"
fill="blue"
stroke="black"
stroke-width="1"
transform="scale(0.0801245 0.0801245)">
<animateTransform
attributeName="transform"
type="scale"
begin="0s"
calcMode="spline"
keySplines="0.3 0 0.7 1;0.3 0 0.7 1"
values="0;1;0"
keyTimes="0;0.5;1"
dur="5s"
repeatCount="indefinite"></animateTransform>
<animate
attributeName="cx"
from="0"
to="800"
dur="5s"
repeatCount="indefinite"
/>
</circle>
</svg>
我用 CSS/HTML 完成了
https://jsfiddle.net/5rfgb38y/17/
但是如果你知道我在 SVG 上做错了什么请告诉我,在我弄清楚我遗漏了什么之前它会困扰我
<div id="container">
<div id="dot"></div>
</div>
#container {
width:100%;
border: 1px solid white;
height: 100px;
position: relative;
}
#dot {
background: white;
border-radius: 50%;
height:10px;
width:10px;
top:50%;
animation: mymove 5s infinite;
position: absolute;
transform: scale(0.1);
}
@keyframes mymove {
from {
left: 0px;
transform: scale(0.1);
}
50% {
left: 50%;
transform: scale(3);
}
to {
left: 100%;
transform: scale(0.1);
}
}
body {
background: black;
}
通过为 cx
属性设置动画,您将更改圆在 SVG 中的位置。由于所有变换的原点都位于 SVG (0,0) 的左上角,因此您的比例会导致圆相对于原点来回移动。
无论如何,为什么还要费心进行比例变换呢?为什么不只为半径设置动画?
<svg width="800px" height="100px">
<circle
cx="0"
cy="50"
r="0"
fill="blue"
stroke="black"
stroke-width="1">
<animate
attributeName="r"
begin="0s"
calcMode="spline"
keySplines="0.3 0 0.7 1;0.3 0 0.7 1"
values="0;15;0"
keyTimes="0;0.5;1"
dur="5s"
repeatCount="indefinite"/>
<animate
attributeName="cx"
from="0"
to="800"
dur="5s"
repeatCount="indefinite"/>
</circle>
</svg>
我一直在为这个 SVG 问题苦恼,我确定这是一个属性或我遗漏的东西,但无法弄清楚
我基本上想构建一个带有圆圈的自定义加载器,该圆圈从 svg 的左侧开始并向右移动,在中间缩放,因此它从小的 0.5 比例开始,增加到 3 比例中间然后缩小到另一边的 0.5 然后重复这个,左右移动,左右移动
到目前为止,我可以让圆圈从左到右移动,我也可以缩放它,但是当我尝试组合这两种动画时,它到处都是。
https://jsfiddle.net/0odvwna4/18/
<svg width="800px" height="100px">
<circle
cx="0"
cy="50"
r="15"
fill="blue"
stroke="black"
stroke-width="1"
transform="scale(0.0801245 0.0801245)">
<animateTransform
attributeName="transform"
type="scale"
begin="0s"
calcMode="spline"
keySplines="0.3 0 0.7 1;0.3 0 0.7 1"
values="0;1;0"
keyTimes="0;0.5;1"
dur="5s"
repeatCount="indefinite"></animateTransform>
<animate
attributeName="cx"
from="0"
to="800"
dur="5s"
repeatCount="indefinite"
/>
</circle>
</svg>
我用 CSS/HTML 完成了 https://jsfiddle.net/5rfgb38y/17/
但是如果你知道我在 SVG 上做错了什么请告诉我,在我弄清楚我遗漏了什么之前它会困扰我
<div id="container">
<div id="dot"></div>
</div>
#container {
width:100%;
border: 1px solid white;
height: 100px;
position: relative;
}
#dot {
background: white;
border-radius: 50%;
height:10px;
width:10px;
top:50%;
animation: mymove 5s infinite;
position: absolute;
transform: scale(0.1);
}
@keyframes mymove {
from {
left: 0px;
transform: scale(0.1);
}
50% {
left: 50%;
transform: scale(3);
}
to {
left: 100%;
transform: scale(0.1);
}
}
body {
background: black;
}
通过为 cx
属性设置动画,您将更改圆在 SVG 中的位置。由于所有变换的原点都位于 SVG (0,0) 的左上角,因此您的比例会导致圆相对于原点来回移动。
无论如何,为什么还要费心进行比例变换呢?为什么不只为半径设置动画?
<svg width="800px" height="100px">
<circle
cx="0"
cy="50"
r="0"
fill="blue"
stroke="black"
stroke-width="1">
<animate
attributeName="r"
begin="0s"
calcMode="spline"
keySplines="0.3 0 0.7 1;0.3 0 0.7 1"
values="0;15;0"
keyTimes="0;0.5;1"
dur="5s"
repeatCount="indefinite"/>
<animate
attributeName="cx"
from="0"
to="800"
dur="5s"
repeatCount="indefinite"/>
</circle>
</svg>