美文网首页网页前端后台技巧(CSS+HTML)【HTML+CSS】
HTML5 Canvas笔记——以图像方式(离屏canvas)实

HTML5 Canvas笔记——以图像方式(离屏canvas)实

作者: 没昔 | 来源:发表于2020-04-07 21:58 被阅读0次

参考书目:《HTML5 Canvas核心技术 图形、动画与游戏开发》

以图像方式(离屏canvas)实现的时钟程序

1-13.html

<!DOCTYPE html>

  <head>

      <title>Image Clock</title>

      <style>

        body {

            background: #dddddd;

        }

        #canvas {

            display: none;

        }

        #snapshotImageElement {

            position: absolute;

            left: 10px;

            margin: 20px;

            border: thin solid #aaaaaa;

        }

      </style>

  </head>

  <body>

      <img id='snapshotImageElement' />

      <canvas id='canvas' width='400' height='400'>

        Canvas not supported

      </canvas>

      <script src='1-14.js'></script>

  </body>

</html>

1-14.js

var canvas = document.getElementById('canvas'),

  context = canvas.getContext('2d'),

  snapshotButton = document.getElementById('snapshotButton'),

  snapshotImageElement = document.getElementById('snapshotImageElement'),

  FONT_HEIGHT = 15,

  MARGIN = 35,

  HAND_TRUNCATION = canvas.width / 25,

  HOUR_HAND_TRUNCATION = canvas.width / 10,

  NUMERAL_SPACING = 20,

  RADIUS = canvas.width / 2 - MARGIN,

  HAND_RADIUS = RADIUS + NUMERAL_SPACING,

  loop;

function drawCircle() {

  context.beginPath();

  context.arc(canvas.width / 2, canvas.height / 2, RADIUS, 0, Math.PI * 2, true);

  context.stroke();

}

function drawNumerals() {

  var numerals = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],

      angle = 0,

      numeralWidth = 0;

  numerals.forEach(function (numeral) {

      angle = Math.PI / 6 * (numeral - 3);

      numeralWidth = context.measureText(numeral).width;

      context.fillText(numeral,

        canvas.width / 2 + Math.cos(angle) * (HAND_RADIUS) - numeralWidth / 2,

        canvas.height / 2 + Math.sin(angle) * (HAND_RADIUS) + FONT_HEIGHT / 3);

  });

}

function drawCenter() {

  context.beginPath();

  context.arc(canvas.width / 2, canvas.height / 2, 5, 0, Math.PI * 2, true);

  context.fill();

}

function drawHand(loc, isHour) {

  var angle = (Math.PI * 2) * (loc / 60) - Math.PI / 2,

      handRadius = isHour ? RADIUS - HAND_TRUNCATION - HOUR_HAND_TRUNCATION :

      RADIUS - HAND_TRUNCATION;

  context.moveTo(canvas.width / 2, canvas.height / 2);

  context.lineTo(canvas.width / 2 + Math.cos(angle) * handRadius,

      canvas.height / 2 + Math.sin(angle) * handRadius);

  context.stroke();

}

function drawHands() {

  var date = new Date,

      hour = date.getHours();

  hour = hour > 12 ? hour - 12 : hour;

  drawHand(hour * 5 + (date.getMinutes() / 60) * 5, true, 0.5);

  drawHand(date.getMinutes(), false, 0.5);

  drawHand(date.getSeconds(), false, 0.2);

}

function updateClockImage() {

  dataUrl = canvas.toDataURL();

  snapshotImageElement.src = dataUrl;

}

function drawClock() {

  context.clearRect(0, 0, canvas.width, canvas.height);

  context.save();

  context.fillStyle = 'rgba(255,255,255,0.8)';

  context.fillRect(0, 0, canvas.width, canvas.height);

  drawCircle();

  drawCenter();

  drawHands();

  context.restore();

  drawNumerals();

  updateClockImage();

}

context.font = FONT_HEIGHT + 'px Arial';

loop = setInterval(drawClock, 1000);

效果如图所示:

相关文章

  • HTML5 Canvas笔记——以图像方式(离屏canvas)实

    参考书目:《HTML5 Canvas核心技术 图形、动画与游戏开发》 以图像方式(离屏canvas)实现的时钟程序...

  • HTML5 - Canvas

    HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像。 Canvas 绘制图像 在使用 ...

  • 离屏Canvas — 使用Web Worker提高你的Canva

    现在因为有了离屏Canvas,你可以不用在你的主线程中绘制图像了! Canvas 是一个非常受欢迎的表现方式,同时...

  • Canvas API的介绍

    首先我们来了解以下canvas标签: canvas是HTML5新增的标签,用于在网页上实时生成图像。 canvas...

  • 棋盘实现

    canvas用于绘制图像(通过javascript) html5中canvas元素仅仅是图像的容器,要通过getC...

  • 1.canvas基础(1)

    canvas定义 Canvas 对象是 HTML5 中新增的。HTML5 标签用于绘制图像(通过脚本,通常是 ...

  • 03、HTML5-Canvas(画布)

    一、什么是 Canvas? HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像 画布是...

  • 什么是 Canvas?

    什么是 Canvas? HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像。 画布是一...

  • 03、HTML5-Canvas(画布)

    一、什么是 Canvas? HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像 画布是...

  • canvas的drawImage方法参数详解

    HTML5中引入新的元素canvas,其drawImage 方法允许在 canvas 中插入其他图像( img 和...

网友评论

    本文标题:HTML5 Canvas笔记——以图像方式(离屏canvas)实

    本文链接:https://www.haomeiwen.com/subject/hboophtx.html