热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

HTML5之Canvas绘制时钟Demo

<!DOCTYPEhtml><html><head><title>Canvas之时钟Demo<title><
DOCTYPE html>
<html>
<head>
<title>Canvas 之 时钟 Demotitle>

<style type="text/css">
*
{
margin
: 0;
padding
: 0;
font-family
: YaHei Consolas Hybrid,宋体;
font-size
: 14px;
list-style
: none;
}
.wrapper
{
margin
: 50px auto;
width
: 400px;
padding
: 10px;
border
: solid 1px gray;
background-color
: #eee;
overflow
:auto;
}/*H1浅蓝阴刻字*/
body
{
background-color
: gray;
}
h1
{
text-align
: center;
display
: block;
background-color
: #C4DEF7;
color
: #344251;
font
: normal 30px "微软雅黑";
text-shadow
: 1px 1px 0px #DEF3FF;
padding
: 5px 0px;
margin
:10px;
box-shadow
: 0px 2px 6px #000;
border-radius
:10px;
}
input[type='button'],input[type='submit']
{ padding:2px 5px;}

#clockMap
{ background-color:White;}
style>
head>
<body>
<h1>
Canvas 之 时钟 Demo
h1>
<div class="wrapper">
<canvas width="400" height="400" id="clockMap">canvas>
<script type="text/Javascript">
//获取画面DOM对象
var canvas = document.getElementById("clockMap");
//获取2D画布的上下文
var map = canvas.getContext("2d");

//格式化时间格式为00:00:00来显示
var formatTime = function (time) {
return time < 10 ? "0" + time : time;
}

//注意:在画时分秒的针时,一定要先保存环境,画完再回到环境中,不能一次画三针
var drawClock = function () {
//清屏
map.clearRect(0, 0, 400, 400);
//保存当前环境
map.save();

//绘制表盘
map.beginPath();
map.lineWidth
= 10;
map.storkeStyle
= "black";
map.arc(
200, 200, 150, 0, 360, true);
map.stroke();
map.closePath();

//绘制刻度
map.translate(200, 200);
for (var i = 0; i < 60; i++) {
if (i % 5 == 0) {
map.beginPath();
map.lineWidth
= 4;
map.strokeStyle
= "red";
map.moveTo(
135, 0);
map.lineTo(
143, 0);
map.stroke();
map.closePath();
}
else {
map.beginPath();
map.lineWidth
= 2;
map.strokeStyle
= "black";
map.moveTo(
140, 0);
map.lineTo(
143, 0);
map.stroke();
map.closePath();
}
map.rotate(
6 * Math.PI / 180);
}

//绘制数字
map.textAlign = "center";
map.textBaseline
= "middle";
map.font
= "bold 30px Arial";
map.fillText(
"3", 115, 0);
map.fillText(
"6", 0, 115);
map.fillText(
"9", -115, 0);
map.fillText(
"12", 0, -115);

//========绘制时针,分针,秒针========
//获取当前时间
var date = new Date();
var hours = date.getHours();
var minute = date.getMinutes();
var seconds = date.getSeconds();
hours
= hours > 12 ? hours - 12 : hours;
var hour = hours + minute / 60;

//绘制时针
map.save();
map.beginPath();
map.rotate((hour
* 30 - 90) * Math.PI / 180);
map.lineWidth
= 6;
map.moveTo(
-10, 0);
map.lineTo(
90, 0);
map.closePath();
map.stroke();
map.restore();

//绘制分针
map.save();
map.beginPath();
map.rotate((minute
* 6 - 90) * Math.PI / 180);
map.lineWidth
= 4;
map.moveTo(
-10, 0);
map.lineTo(
132, 0);
map.closePath();
map.stroke();
map.restore();

//绘制秒针
map.save();
map.beginPath();
map.rotate((seconds
* 6 - 90) * Math.PI / 180);
map.lineWidth
= 2;
map.strokeStyle
= "red";
map.moveTo(
-10, 0);
map.lineTo(
138, 0);
map.closePath();
map.stroke();
map.restore();

//中心点
map.save();
map.beginPath();
map.arc(
0, 0, 4, 0, 360, true);
map.closePath();
map.lineWidth
= 2;
map.strokeStyle
= "red";
map.fill();
map.stroke();
map.restore();

//时间显示
map.save();
map.font
= "24px Arial";
map.fillText(
"当前时间:"+formatTime(hours) + ":" + formatTime(minute) + ":" + formatTime(seconds), -1, -180);
map.restore();

//将画好的时钟显示在之前保存的环境中
map.restore();
}

//加载时,执行一次,避免刷新时,有一秒的延迟
drawClock();

//开启定时器
window.setInterval(drawClock, 1000);
script>
div>
body>
html>
效果图:
Canvas时钟

推荐阅读
  • 本文整理了Java中org.gwtbootstrap3.client.ui.Icon.addDomHandler()方法的一些代码示例,展示了Icon.ad ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • 本文介绍了在MFC下利用C++和MFC的特性动态创建窗口的方法,包括继承现有的MFC类并加以改造、插入工具栏和状态栏对象的声明等。同时还提到了窗口销毁的处理方法。本文详细介绍了实现方法并给出了相关注意事项。 ... [详细]
  • JavaScript和HTML之间的交互是经由过程事宜完成的。事宜:文档或浏览器窗口中发作的一些特定的交互霎时。能够运用侦听器(或处置惩罚递次来预订事宜),以便事宜发作时实行相应的 ... [详细]
  • React基础篇一 - JSX语法扩展与使用
    本文介绍了React基础篇一中的JSX语法扩展与使用。JSX是一种JavaScript的语法扩展,用于描述React中的用户界面。文章详细介绍了在JSX中使用表达式的方法,并给出了一个示例代码。最后,提到了JSX在编译后会被转化为普通的JavaScript对象。 ... [详细]
  • 用Vue实现的Demo商品管理效果图及实现代码
    本文介绍了一个使用Vue实现的Demo商品管理的效果图及实现代码。 ... [详细]
  • 本文总结了在编写JS代码时,不同浏览器间的兼容性差异,并提供了相应的解决方法。其中包括阻止默认事件的代码示例和猎取兄弟节点的函数。这些方法可以帮助开发者在不同浏览器上实现一致的功能。 ... [详细]
  • 本文介绍了利用ARMA模型对平稳非白噪声序列进行建模的步骤及代码实现。首先对观察值序列进行样本自相关系数和样本偏自相关系数的计算,然后根据这些系数的性质选择适当的ARMA模型进行拟合,并估计模型中的位置参数。接着进行模型的有效性检验,如果不通过则重新选择模型再拟合,如果通过则进行模型优化。最后利用拟合模型预测序列的未来走势。文章还介绍了绘制时序图、平稳性检验、白噪声检验、确定ARMA阶数和预测未来走势的代码实现。 ... [详细]
  • 颜色迁移(reinhard VS welsh)
    不要谈什么天分,运气,你需要的是一个截稿日,以及一个不交稿就能打爆你狗头的人,然后你就会被自己的才华吓到。------ ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 本文整理了Java中org.apache.ibatis.mapping.ParameterMapping.getNumericScale()方法的一些代码示例,展示了 ... [详细]
author-avatar
过去无法回去
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有