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

yizhihongxing

下面是“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日

相关文章

  • Web Components实现类Element UI中的Card卡片

    Web Components是一种新的Web开发标准,提供了一种封装和组合Web页面元素的方式。其中,类Element UI中的Card卡片是一种常用的UI组件,本文将详细讲解如何使用Web Components来实现这种卡片。 一、创建Card组件原型 首先,我们需要创建一个Card组件原型,可以使用ES6的类来实现: class Card extends…

    JavaScript 2023年6月11日
    00
  • JS轮播图中缓动函数的封装

    如果你想实现一个流畅的 JS 轮播图,那么你需要考虑如何使用缓动函数来实现平滑的动画效果。在本篇攻略中,我们将会详细讲解如何封装缓动函数,并结合两个简单的示例来演示如何使用。 一、什么是缓动函数? 缓动函数是一种常见的 JavaScript 动画技术,它使用数学公式来控制动画中的速度变化。常见的缓动函数包括线性缓动函数、加速缓动函数和弹性缓动函数等。 在实现…

    JavaScript 2023年6月11日
    00
  • JS中call apply bind函数手写实现demo

    下面是关于“JS中call apply bind函数手写实现demo”的攻略: 理解call、apply、bind函数 在手写这三个函数的过程中,我们必须先清楚地理解这三个函数的作用: call函数:调用一个函数,将一个对象作为第一个参数,以及多个参数传入该函数。 apply函数:调用一个函数,将一个对象作为第一个参数,以及一个参数数组传入该函数。 bind…

    JavaScript 2023年6月10日
    00
  • JavaScript创建对象的七种方式(推荐)

    JavaScript创建对象的七种方式(推荐) 在JavaScript中,创建对象有多种方式。本文将介绍七种推荐的创建对象的方式。 1. 对象字面量 对象字面量是创建对象最常用、最简单的方式之一。使用花括号{}包裹对象中的属性和方法即可。 const person = { name: ‘Alice’, age: 30, sayHello() { consol…

    JavaScript 2023年5月27日
    00
  • 一个js随机颜色脚本(用于标签页面,也可用于任何页面)

    让我来详细讲解一下如何编写一个JS随机颜色脚本来为标签页面或者其他页面随机生成颜色。 1. 定义一个随机颜色的函数 第一步,我们需要定义一个JS函数来随机生成颜色。代码如下: function getRandomColor() { var letters = ‘0123456789ABCDEF’; var color = ‘#’; for (var i = …

    JavaScript 2023年6月11日
    00
  • js中的关联数组与普通数组详解

    JS中的关联数组与普通数组详解 在JavaScript中有两种基本的数组类型,分别是关联数组和普通数组。这两种数组的定义和使用方法有很大的不同。 1. 普通数组 普通数组是一种使用下标访问元素的数组。它提供了一个基于数字索引的快速访问列表的方法,下标从0开始,索引号连续排列。 1.1 定义和初始化 普通数组的定义可以使用[]或Array()两种方式进行。例如…

    JavaScript 2023年5月27日
    00
  • JavaScript中.min.js和.js文件的区别讲解

    JavaScript是一种在浏览器中运行的脚本语言,它不仅可以为网页增添动态效果,还可以实现与用户的交互。在JavaScript中,我们通常会看到两种不同的文件类型:.js文件和.min.js文件。这两种文件类型的主要区别在于其文件大小和文件内容的压缩方式。 .js文件 .js文件是JavaScript源代码文件的扩展名,这种文件类型通常包含已经格式化好的、…

    JavaScript 2023年5月27日
    00
  • javascript运动效果实例总结(放大缩小、滑动淡入、滚动)

    下面是 “javascript运动效果实例总结(放大缩小、滑动淡入、滚动)” 的详细攻略: 1. 放大缩小实例 该实例可以通过javascript实现图片的放大和缩小,具体思路如下: 1.1 给图片添加鼠标事件 在html中给需要放大缩小的图片添加mouseenter事件: <img src="picture.jpg" id=&qu…

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