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 的 DOM 树结构中,当某个元素触发了一个事件后,它会向父元素逐层传递,直至到达文档根节点。这种事件传递方式被称为事件冒泡。 冒泡机制的触发方式 当一个元素触发一个事件时,事件将从触发元素开始,然后向上冒泡到它的父元素,父元素的父元素,依此类推,直到冒泡到文档中的根元素为止。整个过程称为事件…

    JavaScript 2023年6月10日
    00
  • js中的变量

    在JavaScript中,我们用var关键字来声明一个变量,var关键字后紧跟变量的名称,例如: var a1 = 40; a1就是变量的名称,用来标识一个变量,所以它又称为变量的标识符。一个变量的标识符必须是由字母、数字、下划线组成,但首字符不能为数字,如: 1user、#user 都不是正确的标识符,而user1、_user是正确的标识符。在JavaSc…

    JavaScript 2023年5月9日
    00
  • js关闭浏览器窗口及检查浏览器关闭事件

    要实现JavaScript关闭浏览器窗口以及检查浏览器关闭事件,可以使用window.close()方法和window.onbeforeunload事件。 使用window.close()方法关闭浏览器窗口 使用window.close()方法可以轻易地关闭当前窗口或打开的窗口。但要注意,在现代浏览器中,该方法只能关闭由JavaScript打开的窗口,不能关…

    JavaScript 2023年6月11日
    00
  • JavaScript中document.forms[0]与getElementByName区别

    在JavaScript中获取表单元素,有两种常见的方式:利用document.forms与利用document.getElementsByName,这两种方式的使用有着许多的不同之处。 document.forms[0]的使用 document.forms属性返回当前文档中所有表单的集合,可以通过下标进行访问,如document.forms[0]就表示获取页…

    JavaScript 2023年6月10日
    00
  • firefox firebug中文入门教程 脚本之家新年特别版

    Firefox Firebug中文入门教程 脚本之家新年特别版 本文主要介绍如何使用Firefox浏览器中自带的调试工具Firebug进行前端开发调试。Firebug具有强大的功能,包括HTML、CSS、JavaScript调试和分析等,非常适合前端开发者使用。 安装Firebug 首先,我们需要在Firefox浏览器中安装Firebug插件。在Firefo…

    JavaScript 2023年6月10日
    00
  • BOM中location对象的属性和方法

    BOM中的location对象表示当前窗口的URL位置,并且可以用它来操作浏览器的历史记录。下面是location对象的属性和方法: location属性 location.href 用于读取或设置当前窗口的URL。如下所示: // 获取当前窗口的URL const currentUrl = location.href; console.log(curren…

    JavaScript 2023年6月11日
    00
  • JavaScript插件化开发教程(五)

    JavaScript插件化开发教程(五)是关于模板的进一步讲解,主要包括以下部分: 一、模板引擎 1.1 什么是模板引擎 模板引擎是一种将数据和模板结合起来生成HTML文档的工具。在JavaScript插件开发中,模板引擎是一个非常重要的部分,在将数据渲染到HTML中时起到了至关重要的作用。 常见的模板引擎有:Handlebars、Mustache、ejs、…

    JavaScript 2023年5月18日
    00
  • 从面试题学习Javascript 面向对象(创建对象)

    很高兴能够为你详细讲解“从面试题学习Javascript 面向对象(创建对象)”的完整攻略。下面我将为你提供详细的自学指导及相关示例。 学习Javascript面向对象的创建对象 了解Javascript中对象的创建方式 在Javascript中,有多种创建对象的方式,包括: 对象字面量语法 构造函数 Object.create方法 工厂函数等 在学习创建对…

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