除非我能找到一个已经编写的实现,否则我会使用Raphaël。
这将需要大量的工作,但最终结果应该是非常好的。
看看一些演示,它们非常光滑。
Raphaël目前支持Firefox 3.0+,Safari 3.0 +,Chrome 5.0 +,Opera 9.5 +和Internet Explorer 6.0 +。
这似乎很有趣,所以我决定用Raphaël自己实现它:
请参见: http://jsfiddle.net/2Tsjy/
它应该在“所有浏览器”中工作。我唯一没有做的部分是文本。
JavaScript:
var paper = Raphael("pentagon"),
fullNum = [40, 53],
borderColours = ['#329342','#9e202c','#f47933','#811f5a','#11496c'],
fillColours = ['#74ae3d','#d01f27','#eaa337','#32133f','#2c7aa1'],
triangles = [],
border, fill, st, i;
for (i=0; i<5; i++) {
border = paper.path(getPercentPath(0)).attr({
'fill': borderColours[i],
'stroke-width': 0
}),
fill = paper.path(["M", 116, 123] + "l-44,61 88,0z").attr({
'stroke': fillColours[i],
'stroke-width': 6
});
triangles.push(border);
st = paper.set();
st.push(border, fill);
st.rotate(i * 72, 116, 113);
setPercent(i, 30+Math.floor(Math.random()*70));
}
function getPercentPath(percent) {
var ratio = percent/100;
return ["M", 116, 128] + "l-" + ratio*fullNum[0] + "," + ratio*fullNum[1] + " " + ratio*fullNum[0]*2 + ",0z";
}
function setPercent(i, percent) {
triangles[i].attr({
path: getPercentPath(percent)
});
}
setInterval(function(){
for (var i=0; i<5; i++) {
setPercent(i, 30+Math.floor(Math.random()*70));
}
}, 2000);
CSS:
#pentagon {
width: 226px;
height: 227px;
border: 1px solid red;
background: #fff;
background: rgba(255,255,255,0.8)
}
网页:
<div id="pentagon"></div>