【发布时间】:2014-02-18 16:54:59
【问题描述】:
我有一个基于 svg 的 Web 项目加载动画,它在悬停时绘制 360° 弧。这需要大约 0.8 秒才能完成。之后一个容器滑入,看我的小提琴:http://jsfiddle.net/s2XCL/2/
function drawCircle(arc) {
var i = 0;
var circle = document.getElementById(arc);
var angle = 0;
var radius = 75;
window.timer = window.setInterval(
function () {
angle -= 5;
angle %= 360;
var radians = (angle / 180) * Math.PI;
var x = 200 + Math.cos(radians) * radius;
var y = 200 + Math.sin(radians) * radius;
var e = circle.getAttribute("d");
if (i === 0) {
var d = e + " M " + x + " " + y;
} else {
var d = e + " L " + x + " " + y;
}
circle.setAttribute("d", d);
i++;
}, 10);
}
function removeCircle() {
// var circle = document.getElementById(arc);
// circle.style.display = "none";
}
该函数在 HTML 标记中的 svg 标记内调用:
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="xMidYMid" style="width:400px; height:400px;" onmouseover="drawCircle('arc2'); removeCircle();">
<path d="M200,200 " id="arc2" fill="none" stroke="rgba(255,255,255,0.3)" stroke-width="5"></path>
</svg>
这按预期工作,但在我的两台测试机上都占用了整个 3 GHz 内核。我目前正在学习JS,所以我只能猜测导致性能不足的原因。
我还希望 svg 在完成动画或鼠标离开容器后消失,所以如果有人对此有提示,那就太好了。
对于任何谷歌同事,请参阅此处http://jsfiddle.net/s2XCL/4/ 以获取解决方案。也可以随意使用 sn-p。
【问题讨论】:
标签: javascript css performance animation svg