我正在尝试绘制一个圆的线条动画。由于需要在移动设备上运行,因此选择了SVG。我有一个完美的工作示例,但它非常低效,并且会导致页面上的其他动画出现卡顿。
这是我目前拥有的内容和我想要实现的内容:http://jsfiddle.net/sj76ysqs/
我想使用以下技术或类似的技术,但我对SVG了解不够,无法实现此目标:http://css-tricks.com/svg-line-animation-works/。我考虑用静态点线来遮盖一个由动态线条揭示的动画线,但同样,我也不知道如何做到这一点。如果您能提供任何帮助,将不胜感激。更新:该解决方案必须适用于具有背景图像的元素。
这是我目前拥有的内容和我想要实现的内容:http://jsfiddle.net/sj76ysqs/
<svg class="bean-halo" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1"
viewBox="0 0 500 500"
preserveAspectRatio="xMidYMid"
style="width:100%; height:100%; position:absolute; top:0; left:0;">
<path d="M200,200 " id="bean-halo" fill="none" stroke="#FF0000" stroke-linecap="round" stroke-width="2.5" stroke-dasharray="0.1,10" />
</svg>
(function() {
var i = 0,
circle = document.getElementById('bean-halo'),
angle = 0,
radius = 167,
interval = 20,
d, radians, x, y, e;
window.timer = window.setInterval(function() {
angle -= 5;
angle %= 360;
radians = (angle / 180) * Math.PI;
x = 250 + Math.cos(radians) * radius;
y = 250 + Math.sin(radians) * radius;
e = circle.getAttribute('d');
d = e + (i === 0 ? ' M ' : ' L ') + x + ' ' + y;
if (angle === -5 && i !== 0) {
window.clearInterval(window.timer);
this.beanHaloisDrawn = 1;
}
circle.setAttribute('d', d);
i++;
}.bind(this), interval);
})()
我想使用以下技术或类似的技术,但我对SVG了解不够,无法实现此目标:http://css-tricks.com/svg-line-animation-works/。我考虑用静态点线来遮盖一个由动态线条揭示的动画线,但同样,我也不知道如何做到这一点。如果您能提供任何帮助,将不胜感激。更新:该解决方案必须适用于具有背景图像的元素。