帆布时钟有透明背景

时间:2016-01-27 15:13:09

标签: html html5-canvas

这是一个基于w3schools.com示例的画布时钟: https://jsfiddle.net/z529mk97/

有谁知道如何使时钟背景透明?

这是代码。我试图将ctx.fillStyle设置为透明,但这会导致秒针在移动后没有被删除。

<canvas id="canvas" width="400" height="400">
</canvas>

<script>
  var canvas = document.getElementById("canvas");
  var ctx = canvas.getContext("2d");
  var radius = canvas.height / 2;
  ctx.translate(radius, radius);
  radius = radius * 0.90
  setInterval(drawClock, 1000);

  function drawClock() {
    drawFace(ctx, radius);
    //drawNumbers(ctx, radius);
    drawTime(ctx, radius);
  }

  function drawFace(ctx, radius) {
    var grad;
    ctx.beginPath();
    ctx.arc(0, 0, radius, 0, 2 * Math.PI);
    ctx.fillStyle = 'grey';
    ctx.fill();
    grad = ctx.createRadialGradient(0, 0, radius * 0.95, 0, 0, radius * 1.05);
    grad.addColorStop(0, 'white');
    grad.addColorStop(0.5, 'white');
    grad.addColorStop(1, 'white');
    ctx.strokeStyle = "white";
    ctx.lineWidth = radius * 0.1;
    ctx.stroke();
    ctx.beginPath();
    //ctx.arc(0, 0, radius*0.1, 0, 2*Math.PI);
    ctx.fillStyle = '#333';
    ctx.fill();
  }

  function drawNumbers(ctx, radius) {
    var ang;
    var num;
    ctx.font = radius * 0.15 + "px arial";
    ctx.textBaseline = "middle";
    ctx.textAlign = "center";
    for (num = 1; num < 13; num++) {
      ang = num * Math.PI / 6;
      ctx.rotate(ang);
      ctx.translate(0, -radius * 0.85);
      ctx.rotate(-ang);
      ctx.fillText(num.toString(), 0, 0);
      ctx.rotate(ang);
      ctx.translate(0, radius * 0.85);
      ctx.rotate(-ang);
    }
  }

  function drawTime(ctx, radius) {
    var now = new Date();
    var hour = now.getHours();
    var minute = now.getMinutes();
    var second = now.getSeconds();
    //hour
    hour = hour % 12;
    hour = (hour * Math.PI / 6) +
      (minute * Math.PI / (6 * 60)) +
      (second * Math.PI / (360 * 60));
    drawHand(ctx, hour, radius * 0.5, radius * 0.07);
    //minute
    minute = (minute * Math.PI / 30) + (second * Math.PI / (30 * 60));
    drawHand(ctx, minute, radius * 0.8, radius * 0.07);
    // second
    second = (second * Math.PI / 30);
    drawHand(ctx, second, radius * 0.9, radius * 0.02);
  }

  function drawHand(ctx, pos, length, width) {
    ctx.beginPath();
    ctx.lineWidth = width;
    ctx.lineCap = "round";
    ctx.moveTo(0, 0);
    ctx.rotate(pos);
    ctx.lineTo(0, -length);
    ctx.stroke();
    ctx.rotate(-pos);
  }
</script>

提前致谢!

2 个答案:

答案 0 :(得分:0)

这样做

更改此类代码。

function drawClock() {
  ctx.clearRect(-radius, -radius, canvas.width, canvas.height);
  drawFace(ctx, radius);
  drawNumbers(ctx, radius);
  drawTime(ctx, radius);
}

和 评论如下所示

function drawFace(ctx, radius) {
  var grad;
  ctx.beginPath();
/*  ctx.arc(0, 0, radius, 0, 2*Math.PI);
  ctx.fillStyle = "rgba(255, 255, 255, 0.7)";
  ctx.fill();*/

尝试为您的身体标签提供背景颜色

Js小提琴演示:https://jsfiddle.net/mhnwaa91/

:)

谢谢和问候, Sebine Francis

答案 1 :(得分:-2)

ctx.fillStyle = 'grey';更改为ctx.fillStyle = 'transparent';