【发布时间】:2014-04-17 01:01:58
【问题描述】:
我已经开始将一个圆圈分成不同的部分,使每个部分成为一个菜单项。
<canvas id="myCanvas" width="500" height="500"></canvas>
使用脚本:
var sec = 0;
$(document).ready(function(){
var redrawTimer = setInterval(function(){
// start drawing the chart
init();
//Increment Counter
sec++;
if( sec == 200 ){//After 2 Secs, Stop animation
clearInterval(redrawTimer);
clearInterval(this);
}
},10);
});
var canvas = document.getElementById('myCanvas');
var context = canvas.getContext('2d');
// center the drawing
var x = canvas.width / 2;
var y = canvas.height / 2;
// number of days
var days = 2;
// number of segments
var hours = 8;
var hoursFull = 1;
// one segment represents a menu item so divide degrees by hours
var segmentWidth = 352 / hours;
var segmentWidthFull = 360 / hoursFull;
// begin at 0 and end at one segment width
var startAngle = 1;
var startAngleFull = 1;
var endAngle = segmentWidth;
var endAngleFull = segmentWidthFull;
// how thick you want a segment
var segmentDepth = 80;
function init(){
for(var i=1; i <= days; i++) {
drawSegments(i*segmentDepth, i, sec);
}
}
var prevStart = 1;
var prevEnd = segmentWidth;
function drawSegments(radius,dayNumber) {
for(var i = 0; i < hours; i++){
context.beginPath();
if( dayNumber == 2 ){
context.strokeStyle = '#f7941e';
if( i == 0 ){
prevStart = startAngle;
prevEnd = endAngle;
startAngle = 271 + sec;
endAngle = segmentWidth + 271 + sec;
context.strokeStyle = '#fff';
}else{
startAngle = prevStart;
endAngle = prevEnd;
}
}
else{
context.strokeStyle = 'rgba(0,0,0,0)';
}
context.arc(x, y, radius, (startAngle * Math.PI / 180), (endAngle * Math.PI / 180), false);
context.lineWidth = segmentDepth;
context.stroke();
startAngle += segmentWidth + 1;
endAngle += segmentWidth + 1;
}
}
我了解不断重绘图像会导致闪烁。有没有办法解决这个问题,因为我没有使用图像加载到缓存中以增加绘制时间?
我是画布的新手,因此我们将不胜感激。
我创建了一个example
【问题讨论】: