Javascript 我能';t在HTML5画布时钟中制作时钟指针作为图像

Javascript 我能';t在HTML5画布时钟中制作时钟指针作为图像,javascript,html,canvas,Javascript,Html,Canvas,我在网上找到了这个时钟,我希望秒针是图像而不是线。我不熟悉拉票,所以我不知道我做错了什么。当我试着把第二只手做成一个图像时,它仍然是一条线,并且没有移动 代码如下: var now=new Date(); var hrs=now.getHours(); var mashpoe=hrs; draw(); function draw() { var canvas = document.getElementById('example'); if (canvas.getContext) {

我在网上找到了这个时钟,我希望秒针是图像而不是线。我不熟悉拉票,所以我不知道我做错了什么。当我试着把第二只手做成一个图像时,它仍然是一条线,并且没有移动

代码如下:

var now=new Date();
var hrs=now.getHours();
var mashpoe=hrs;
draw();

function draw() {
  var canvas = document.getElementById('example');
  if (canvas.getContext) {
    var c2d=canvas.getContext('2d');
    c2d.clearRect(0,0,300,300);
    //Define gradients for 3D / shadow effect
    var grad1=c2d.createLinearGradient(0,0,300,300);
    grad1.addColorStop(0,"#D83040");
    grad1.addColorStop(1,"#801020");
    var grad2=c2d.createLinearGradient(0,0,300,300);
    grad2.addColorStop(0,"#801020");
    grad2.addColorStop(1,"#D83040");
    c2d.font="Bold 12px Arial";
    c2d.textBaseline="middle";
    c2d.textAlign="center";
    c2d.lineWidth=1;
    c2d.save();
    //Outer bezel
    c2d.strokeStyle=grad1;
    c2d.lineWidth=10;
    c2d.beginPath();
    c2d.arc(150,150,138,0,Math.PI*2,true);
    c2d.shadowOffsetX=4;
    c2d.shadowOffsetY=4;
    c2d.shadowColor="rgba(0,0,0,0.6)";
    c2d.shadowBlur=6;
    c2d.stroke();
    //Inner bezel
    c2d.restore();
    c2d.strokeStyle=grad2;
    c2d.lineWidth=10;
    c2d.beginPath();
    c2d.arc(150,150,129,0,Math.PI*2,true);
    c2d.stroke();
    c2d.strokeStyle="#222";
    c2d.save();
    c2d.translate(150,150);
    //Markings/Numerals
    for (i=1;i<=60;i++) {
      ang=Math.PI/30*i;
      sang=Math.sin(ang);
      cang=Math.cos(ang);
      //If modulus of divide by 5 is zero then draw an hour marker/numeral
      if (i % 5 == 0) {
        c2d.lineWidth=4;
        sx=sang*95;
        sy=cang*-95;
        ex=sang*120;
        ey=cang*-120;
        nx=sang*80;
        ny=cang*-80;
        c2d.fillText(i/5,nx,ny);
      //Else this is a minute marker
      } else {
        c2d.lineWidth=2;
        sx=sang*110;
        sy=cang*110;
        ex=sang*120;
        ey=cang*120;
      }
      c2d.beginPath();
      c2d.moveTo(sx,sy);
      c2d.lineTo(ex,ey);
      c2d.stroke();
    }
  if (hrs > mashpoe){
    mashpoe ++;
  }
    //Fetch the current time
    var ampm="AM";
    var now=new Date();
    var hrs=now.getHours();
    var min=now.getMinutes();
    var sec=now.getSeconds();
    c2d.strokeStyle="#000";
    //Draw AM/PM indicator
    if (hrs>=12) ampm="PM";
    c2d.lineWidth=1;
    c2d.strokeRect(21,-14,44,27);
    c2d.fillText(ampm,43,0);

    c2d.lineWidth=6;
    c2d.save();
    //Draw clock pointers but this time rotate the canvas rather than
    //calculate x/y start/end positions.
    //
    //Draw hour hand
    c2d.rotate(Math.PI/6*(hrs+(min/60)+(sec/3600)));
    c2d.beginPath();
    c2d.moveTo(0,10);
    c2d.lineTo(0,-60);
    c2d.stroke();
    c2d.restore();
    c2d.save();
    //Draw minute hand
    c2d.rotate(Math.PI/30*(min+(sec/60)));
    c2d.beginPath();
    c2d.moveTo(0,20);
    c2d.lineTo(0,-110);
    c2d.stroke();
    c2d.restore();
    c2d.save();
    //Draw second hand
    c2d.rotate(Math.PI/30*sec);
    c2d.strokeStyle="#E33";
    c2d.beginPath();
    c2d.moveTo(0,20);
    c2d.lineTo(0,-110);
    c2d.stroke();
    c2d.restore();

    //Additional restore to go back to state before translate
    //Alternative would be to simply reverse the original translate
    c2d.restore();
    setTimeout(draw,1000);
  }
}
var now=newdate();
var hrs=now.getHours();
var mashpoe=小时;
draw();
函数绘图(){
var canvas=document.getElementById('example');
if(canvas.getContext){
var c2d=canvas.getContext('2d');
c2d.clearRect(0,0300);
//定义三维/阴影效果的渐变
var grad1=c2d.createLinearGradient(0,0300);
渐变1.添加颜色停止(0,#D83040”);
渐变1.添加颜色停止(1,#801020“);
var grad2=c2d.createLinearGradient(0,0300);
渐变2.添加颜色停止(0,#801020”);
渐变2.添加颜色停止(1,#D83040”);
c2d.font=“Bold 12px Arial”;
c2d.textBaseline=“中间”;
c2d.textAlign=“中心”;
c2d.线宽=1;
c2d.save();
//外挡板
c2d.冲程方式=梯度1;
c2d.线宽=10;
c2d.beginPath();
c2d.弧(150138,0,数学π*2,真);
c2d.shadowOffsetX=4;
c2d.shadowOffsetY=4;
c2d.shadowColor=“rgba(0,0,0,0.6)”;
c2d.阴影模糊=6;
c2d.stroke();
//内挡板
c2d.restore();
c2d.冲程方式=梯度2;
c2d.线宽=10;
c2d.beginPath();
c2d.arc(150129,0,数学π*2,真);
c2d.stroke();
c2d.strokeStyle=“#222”;
c2d.save();
c2d.翻译(150150);
//标记/数字
for(i=1;i-mashpoe){
mashpoe++;
}
//获取当前时间
var ampm=“AM”;
var now=新日期();
var hrs=now.getHours();
var min=now.getMinutes();
var sec=now.getSeconds();
c2d.strokeStyle=“#000”;
//绘制AM/PM指示器
如果(小时数>=12)ampm=“PM”;
c2d.线宽=1;
c2d.strokeRect(21,-14,44,27);
c2d.填充文本(ampm,43,0);
c2d.线宽=6;
c2d.save();
//绘制时钟指针,但这次旋转画布,而不是
//计算x/y起始/结束位置。
//
//划时针
c2d.旋转(数学PI/6*(小时+(分钟/60)+(秒/3600));
c2d.beginPath();
c2d.moveTo(0,10);
c2d.lineTo(0,-60);
c2d.stroke();
c2d.restore();
c2d.save();
//画分针
c2d.旋转(数学PI/30*(分钟+(秒/60));
c2d.beginPath();
c2d.moveTo(0,20);
c2d.lineTo(0,-110);
c2d.stroke();
c2d.restore();
c2d.save();
//抽二手货
c2d.旋转(数学PI/30*秒);
c2d.strokeStyle=“#E33”;
c2d.beginPath();
c2d.moveTo(0,20);
c2d.lineTo(0,-110);
c2d.stroke();
c2d.restore();
//要恢复到转换前的状态的附加还原
//另一种方法是简单地反转原始译文
c2d.restore();
设置超时(绘图,1000);
}
}
画布是300px 300px


时钟属于Neil Wallis:

尝试将代码粘贴到实际尝试添加图像的位置。在上面的代码中,我看不出您将在哪里添加图像,您只是复制了neilwallis正在做的事情。请检查此答案以获得一些帮助:。您需要将
//Draw second hand
注释下的代码替换为
drawImage()
代码。请尝试将代码粘贴到实际尝试添加图像的位置。在上面的代码中,我看不出您将在哪里添加图像,您只是复制了neilwallis正在做的事情。请检查此答案以获得一些帮助:。您需要将
//Draw second hand
注释下的代码替换为
drawImage()
代码。