一秒之后就變了。。。
代碼
// JavaScript Document
var dom=document.getElementById('clock');
var ctx=dom.getContext('2d');//獲取上下文
var width=ctx.canvas.width;
var height=ctx.canvas.height;
var r=width/2;//半徑是寬度一半
function drawBackground(){
?ctx.translate(r,r);//重新映射(0,0)位置
?ctx.beginPath();//開始一條新的路徑
?ctx.lineWidth=10;
?ctx.arc(0,0,r-5,0,2*Math.PI,false);
?ctx.stroke();//繪制定義的路徑
?
?var hourNumbers=[3,4,5,6,7,8,9,10,11,12,1,2];
?ctx.font='18px Arial';
?ctx.textAlign='center';
?ctx.textBaseline='middle';
?hourNumbers.forEach(function(number,i){
??var rad=2*Math.PI/12*i;
??var x=Math.cos(rad)*(r-30);
???? var y=Math.sin(rad)*(r-30);
??ctx.fillText(number,x,y);
});
for(var i=0;i<60;i++){
?var rad=2*Math.PI/60*i;
?var x=Math.cos(rad)*(r-16);
?var y=Math.sin(rad)*(r-16);
?ctx.beginPath();
?if(i%5==0)
?{
??ctx.fillStyle='#000';
??ctx.arc(x,y,2,0,2*Math.PI,false);
?}else{
??ctx.fillStyle='#ccc';
??ctx.arc(x,y,2,0,2*Math.PI,false);
??}
?ctx.fill();
?}
}
function drawHour(hour,minute){
?ctx.save();
?ctx.beginPath();
?var rad=2*Math.PI/12*hour;
?var mrad=2*Math.PI/12/60*minute;
?ctx.rotate(rad+mrad);
?ctx.lineWidth=6;
?ctx.lineCap="round";
?ctx.moveTo(0,10);
?ctx.lineTo(0,-r/2)
?ctx.stroke();
?ctx.restore();
}
function drawMinute(minute){
?ctx.save();
?ctx.beginPath();
?var rad=2*Math.PI/60*minute;
?ctx.rotate(rad);//旋轉(zhuǎn)當(dāng)前弧度
?ctx.lineWidth=3;
?ctx.lineCap="round";
?ctx.moveTo(0,10);//把路徑移動到畫布的指定點(diǎn),開始一條路徑,移動到(0,10)
?ctx.lineTo(0,-r+42)//到達(dá)(0,-r+45)
?ctx.stroke();
?ctx.restore();
}
function drawSecond(second){
?ctx.save();
?ctx.beginPath();
?ctx.fillStyle='#c14543';
?var rad=2*Math.PI/60*second;
?ctx.rotate(rad);
?ctx.moveTo(-2,20);
?ctx.lineTo(2,20);
?ctx.lineTo(1,-r+18);
?ctx.lineTo(-1,-r+18);
?ctx.fill();
?ctx.restore();
}
function drawDot(){
?ctx.beginPath();
?ctx.fillStyle='#fff';
?ctx.arc(0,0,3,0,2*Math.PI,false);
?ctx.fill();
}
function draw()
{
?ctx.clearRect(0,0,width,height);
?var now=new Date();
?var hour=now.getHours();
?var minute=now.getMinutes();
?var second=now.getSeconds();?
?drawBackground();
??? drawHour(hour,minute);
??? drawMinute(minute);
??? drawSecond(second);
?drawDot();
?ctx.restore();
}
draw();
setInterval(draw,1000);
大神求解
2016-10-13
在drawBackground()開始那保存一下當(dāng)前的環(huán)境狀態(tài)
2016-12-08
我的也是這個問題,一秒之后就變了,這是怎么回事能回答一下么
/**
* Created by Administrator on 2016/12/8 0008.
*/
var dom=document.getElementById('clock');//獲取canvas元素
var ctx=dom.getContext('2d');//讀取canvas內(nèi)容
var width=ctx.canvas.width;
var height=ctx.canvas.height;//獲取canvas寬高
var r=width/2;//取得時(shí)鐘半徑,為正方形一半
function drawBackground(){
? ?ctx.save();
? ?ctx.translate(r,r);//把圓心挪到指定的位置。因?yàn)椋?,0)位置在正方形的左上角
? ?ctx.beginPath();//指定路徑
? ?ctx.lineWidth=10;
? ?ctx.arc(0,0,r-5,0,2*Math.PI,false)//畫圓形,但沒出來,因?yàn)闆]定義是填充還是繪制
? ?ctx.stroke();//繪制,qianmian需要定義線條
? ?var hourNumber=[3,4,5,6,7,8,9,10,11,12,1,2];//定義數(shù)組存貯小時(shí)數(shù)
? ?ctx.font='18px Arial';
? ?ctx.textAlign='center';
? ?ctx.textBaseline='middle';
? ?hourNumber.forEach(function(number,i){//畫小時(shí)
? ? ? ?var rad=2*Math.PI/12*i;//每個小時(shí)的弧度
? ? ? ?var x=Math.cos(rad)*(r-30);//小時(shí)的半徑小點(diǎn)
? ? ? ?var y=Math.sin(rad)*(r-30);
? ? ? ?ctx.fillText(number,x,y);//在坐標(biāo)軸上填寫文字
? ?});
? ?for(var i=0;i<60;i++){
? ? ? ?//遍歷60個點(diǎn),
? ? ? ?var rad=2*Math.PI/60*i;
? ? ? ?var x=Math.cos(rad)*(r-18);
? ? ? ?var y=Math.sin(rad)*(r-18);
? ? ? ?ctx.beginPath();
? ? ? ?//加個判斷小時(shí)黑色,不是的是灰色
? ? ? ?if(i%5==0){
? ? ? ? ? ?ctx.fillStyle='#000';
? ? ? ? ? ?ctx.arc(x,y,2,0,2*Math.PI,false);
? ? ? ?}else{
? ? ? ? ? ?ctx.fillStyle='#ccc';
? ? ? ? ? ?ctx.arc(x,y,2,0,2*Math.PI,false);
? ? ? ?}
? ? ? ?ctx.fill();//填充
? ?}
? ?}
function drawHour(hour){
? ?ctx.save();
? ?//花小時(shí)針
? ?ctx.save();//保存之氣那的畫布
? ?ctx.beginPath();
? ?var rad=2*Math.PI/12*hour;
? ?ctx.rotate(rad);
? ?ctx.lineWidth=6;
? ?ctx.lineCap='round';
? ?ctx.moveTo(0,10);//
? ?ctx.lineTo(0,-r/2);
? ?ctx.stroke();
? ?ctx.restore();//還原小時(shí)之前的畫布
}
function drawMinute(minute){
? ?ctx.save();
? ?ctx.beginPath();
? ?var rad=2*Math.PI/60*minute;
? ?ctx.rotate(rad);
? ?ctx.lineWidth=3;
? ?ctx.lineCap='round';
? ?ctx.moveTo(0,10);
? ?ctx.lineTo(0,-r+30);
? ?ctx.stroke();
? ?ctx.restore();
}
function drawSecond(second){
? ?ctx.save();
? ?ctx.beginPath();
? ?ctx.fillStyle='#c14543';
? ?var rad=2*Math.PI/60*second;
? ?ctx.rotate(rad);
? /* ctx.lineWidth=3;
? ?ctx.lineCap='round';*/
? ?ctx.moveTo(-2,20);
? ?ctx.lineTo(2,20);
? ?ctx.lineTo(1,-r+18);
? ?ctx.lineTo(-1,-r+18);
? ?ctx.fill();
? ?ctx.restore();
}
function drawDot(){//畫中心遠(yuǎn)點(diǎn)
? ?ctx.beginPath();
? ?ctx.fillStyle='#fff';
? ?ctx.arc(0,0,3,0,2*Math.PI,false);
? ?ctx.fill();
}
function draw(){
? ?ctx.clearRect(0,0,width,height);
? ?drawBackground();
? ?var now=new Date();
? ?var hour=now.getHours();
? ?var minute=now.getMinutes();
? ?var second=now.getSeconds();
? ?drawHour(hour,minute);
? ?drawMinute(minute);
? ?drawSecond(second);
? ?drawDot();
? ?ctx.restore();
}
setInterval(draw,1000);//每秒都畫一次時(shí)分秒針,但是會留有以前的
2016-10-22
保存了也是這個樣子。。我也是同樣的問題。。求大神