html5 canvas js(数字时钟)实例代码

下面是“HTML5 Canvas JS(数字时钟)实例代码”的完整攻略。

前置知识

在学习 HTML5 Canvas JS 时,需要具备 HTML 和 JavaScript 的基础知识。

步骤

步骤1:创建 HTML 文件

首先,创建一个 HTML 文件,并添加一个 canvas 标签以显示数字时钟。代码如下:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>数字时钟</title>
  </head>
  <body>
    <canvas id="clock" width="200" height="200"></canvas>
    <script src="clock.js"></script>
  </body>
</html>

步骤2:创建 JavaScript 文件

然后,创建一个 JavaScript 文件,并在其中编写数字时钟的绘制代码。代码如下:

var canvas = document.getElementById('clock');
var context = canvas.getContext('2d');
var radius = canvas.height / 2;

function drawClock() {
  context.beginPath();
  context.arc(radius, radius, radius, 0, 2 * Math.PI, false);
  context.fillStyle = 'white';
  context.fill();
  context.lineWidth = 5;
  context.strokeStyle = 'black';
  context.stroke();
  context.beginPath();
  context.arc(radius, radius, radius * 0.9, 0, 2 * Math.PI, false);
  context.fillStyle = 'white';
  context.fill();
  context.lineWidth = 5;
  context.strokeStyle = 'black';
  context.stroke();
  context.font = radius * 0.15 + "px arial";
  context.fillStyle = 'black';
  context.textAlign = "center";
  context.textBaseline = "middle";
  for (var i = 1; i <= 12; i++) {
    var angle = i * Math.PI / 6;
    context.rotate(angle);
    context.translate(0, radius * 0.85);
    context.rotate(-angle);
    context.fillText(i.toString(), 0, 0);
    context.rotate(angle);
    context.translate(0, -radius * 0.85);
    context.rotate(-angle);
  }
}

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

function drawHand(context, position, length, width) {
  context.beginPath();
  context.lineWidth = width;
  context.lineCap = "round";
  context.moveTo(radius, radius);
  context.rotate(position);
  context.lineTo(radius, radius - length);
  context.stroke();
  context.rotate(-position);
}

setInterval(function() {
  context.clearRect(0, 0, canvas.width, canvas.height);
  drawClock();
  drawHands();
}, 1000);

代码中 drawClock() 函数用于绘制背景面板,并绘制时钟数字;drawHands() 函数用于绘制指针,并获取当前系统时间;drawHand() 函数用于具体实现指针的绘制。

最后,通过 setInterval() 函数和 clearRect() 方法实现时钟的每秒更新。

步骤3:样式和调整

最后,可以通过 CSS 修改时钟的外观样式,并可在 JavaScript 中细调旋转角度以达到特定效果。

以下是调整过旋转和样式的示例代码。

var canvas = document.getElementById('clock');
var context = canvas.getContext('2d');
var radius = canvas.height / 2;

function drawClock() {
  context.beginPath();
  context.arc(radius, radius, radius, 0, 2 * Math.PI, false);
  context.fillStyle = 'white';
  context.fill();
  context.lineWidth = 5;
  context.strokeStyle = '#333';
  context.stroke();
  context.beginPath();
  context.arc(radius, radius, radius * 0.9, 0, 2 * Math.PI, false);
  context.fillStyle = 'white';
  context.fill();
  context.lineWidth = 5;
  context.strokeStyle = '#333';
  context.stroke();
  context.font = radius * 0.15 + "px arial";
  context.fillStyle = '#333';
  context.textAlign = "center";
  context.textBaseline = "middle";
  for (var i = 1; i <= 12; i++) {
    var angle = i * Math.PI / 6;
    context.rotate(angle);
    context.translate(0, radius * 0.85);
    context.rotate(-angle);
    context.fillText(i.toString(), 0, 0);
    context.rotate(angle);
    context.translate(0, -radius * 0.85);
    context.rotate(-angle);
  }
}

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

function drawHand(context, position, length, width) {
  context.beginPath();
  context.lineWidth = width;
  context.lineCap = "round";
  context.moveTo(radius, radius);
  context.rotate(position);
  context.lineTo(radius, radius - length);
  context.stroke();
  context.rotate(-position);
}

setInterval(function() {
  context.clearRect(0, 0, canvas.width, canvas.height);
  context.save();
  context.translate(radius, radius);
  context.rotate(-Math.PI / 2);
  drawClock();
  drawHands();
  context.restore();
}, 1000);

这段代码通过 context.rotate() 方法细调位置和旋转角度,并通过 CSS 修改时钟的外观样式。

示例说明

示例1

如果想让时钟移动到页面中心,只需在 JavaScript 中调整绘图时钟的坐标。代码如下:

...
var radius = Math.min(canvas.width, canvas.height) / 2;
...
function drawClock() {
  context.beginPath();
  context.arc(radius, radius, radius, 0, 2 * Math.PI, false);
  ...
}
...
setInterval(function() {
  context.clearRect(0, 0, canvas.width, canvas.height);
  drawClock();
  drawHands();
}, 1000);

这段代码通过获取 canvas 的宽度和高度,计算出时钟的半径并绘制时钟;最后通过 setInterval()clearRect() 方法实现每秒更新时钟。

示例2

如果想让时钟的颜色和样式得到个性化展示,只需在 HTML 和 CSS 中做出相应修改。代码如下:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>数字时钟</title>
    <style>
      canvas {
        background-color: #E8CBCA;
        border-radius: 50%;
        box-shadow: 2px 2px #BAA8A7;
      }
    </style>
  </head>
  <body>
    <canvas id="clock" width="200" height="200"></canvas>
    <script src="clock.js"></script>
  </body>
</html>

这段代码通过在 style 标签中添加 CSS 样式,来美化时钟的外观。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:html5 canvas js(数字时钟)实例代码 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 高性能的javascript之加载顺序与执行原理篇

    加载顺序 JavaScript 的加载顺序在浏览器中是从上到下、从左到右的,也就是按照 HTML 文档中<script>标签的出现的顺序进行逐个加载和执行。此外,当遇到<script>标签中的defer或async属性时,也会影响 JavaScript 脚本的加载与执行顺序。 defer:表示该脚本在 HTML 文档中的其他元素加载完…

    JavaScript 2023年5月27日
    00
  • js url传值中文乱码之解决之道

    我会为你详细讲解”js url传值中文乱码之解决之道”的完整攻略。 标准规范 在URL传值的过程中,中文数据因为编码问题可能会引起乱码。解决方法是采用UTF-8编码,使用encodeURIComponent()函数进行编码,使用decodeURIComponent()函数进行解码。 代码示例1: //编码(传值时) var name = "张三&q…

    JavaScript 2023年5月19日
    00
  • 微信小程序表单验证错误提示效果

    这里提供一份完整的“微信小程序表单验证错误提示效果”的攻略,以帮助开发者正确实现表单验证并进行错误提示。 1. 确定表单验证的规则 在开始编写表单验证之前,我们需要先确定表单的验证规则。这包括哪些字段是必填的(不能为空)、字段的数据类型、格式符合的正则表达式等等。 例如,在一个注册页面中,我们需要对用户的邮箱地址、密码、昵称等信息进行验证。验证规则可以如下所…

    JavaScript 2023年6月10日
    00
  • Javascript数组及类数组相关原理详解

    Javascript数组及类数组相关原理详解 在Javascript中数组是一个非常重要的数据结构,它可以存储多个数据并进行操作。但是在实际开发中,我们还会遇到类数组对象,这些对象类似于数组但并不是数组,本文将详细介绍Javascript数组及类数组相关原理。 数组基本操作 定义数组 定义数组有两种方式,一种是通过字面量方式,另一种是通过构造函数方式。 //…

    JavaScript 2023年5月27日
    00
  • asp.net中使用cookie传递参数的方法

    针对“asp.net中使用cookie传递参数的方法”,我将分为以下几个部分进行说明: 什么是cookie? 如何创建cookie? 如何读取cookie? 如何删除cookie? 使用cookie传递参数的示例 什么是cookie? cookie是一种用于存储浏览器访问网站时的小文件。当用户访问一个网站,服务器会将cookie文件存储到用户的计算机上,当用…

    JavaScript 2023年6月11日
    00
  • JavaScript面向对象实现贪吃蛇游戏

    JavaScript面向对象实现贪吃蛇游戏的步骤如下: 定义Snake类 Snake类表示贪吃蛇,包含以下属性: body:表示蛇身,由一个包含多个坐标的数组组成 direction:表示蛇的方向,可以取值为”up”、”down”、”left”、”right”之一 Snake类包含以下方法: move():根据方向移动蛇的位置,并更新蛇的身体 changeD…

    JavaScript 2023年6月10日
    00
  • 什么是DOM(Document Object Model)文档对象模型

    DOM (Document Object Model,文档对象模型)是一种表示 HTML 和 XML 文档的标准程序接口。通过使用 DOM,可以访问和操作一个文档中的内容。DOM 描述了一个层次化的节点树,允许开发人员添加、修改或删除文档中的任意部分。 DOM 模型分为三个部分:文档结构模型(Document),元素对象模型(Element)和特性对象模型(…

    JavaScript 2023年6月10日
    00
  • React组件化学习入门教程讲解

    下面我会详细讲解一下关于“React组件化学习入门教程讲解”的完整攻略: React组件化学习入门教程讲解 什么是React组件化 React.js是一个JavaScript库,可用于构建大型并高性能的web应用程序。React利用组件来管理界面上的各个部分。React的这种组件化开发方式是一种流行的前端编程模式,它使得应用程序更容易维护且易于扩展。在Rea…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部