问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何用HTML5中的canvas制作动画时钟

发布网友 发布时间:2022-04-19 20:07

我来回答

1个回答

热心网友 时间:2022-05-19 07:01

详细解释都在代码中,如下:

[html] view plain copy
<!DOCTYPE HTML>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Clock</title>
<style>
body{background: #dddddd;}
#canvas{margin: 20px;padding:20px;background: #ffffff;border: thin inset #aaaaaa;}
</style>
</head>
<body>
<canvas id=canvas height="300" width="600"></canvas>
<script type="text/javascript">
var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d");
/** 定义字体高度 */
var FONT_HEIGHT = 15,
/** 偏移量 */
MARGIN = 35,
/** 指针长度 */
HAND_TRUNCATION = canvas.width/25,
/** 小时指针长度 */
HOUR_HAND_TRUNCATION = canvas.height/10,
/** 指示器 */
NUMERAL_SPACING = 20,
/** 半径 */
RADIUS = canvas.height/2 - MARGIN,
/** 指针半径 */
HAND_RADIUS = RADIUS + NUMERAL_SPACING;

/** 画圆 */
function drawCircle(){
context.beginPath();
//画圆
context.arc(canvas.width/2,canvas.height/2,RADIUS,0,Math.PI*2,true);
//执行绘画 stroke是画线
context.stroke();
}

function drawNumerals(){
var numerals = [1,2,3,4,5,6,7,8,9,10,11,12];
var angle = 0;
var numeralWidth = 0;
for(var i in numerals){
angle = Math.PI/6 * (numerals[i]-3);
numeralWidth = context.measureText(numerals[i]).width;
context.fillText(numerals[i],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);
//fill是画实心圆,填充
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();
//将24小时制转换为12小时制
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 drawClock(){
//每次清除一次canvas
context.clearRect(0,0,canvas.width,canvas.height);
//重新画,形成动画效果
drawCircle();
drawCenter();
drawHands();
drawNumerals();
}
context.font = FONT_HEIGHT + 'px Arial';
loop = setInterval(drawClock, 1000);
</script>

</body>
</html>
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
孤胆枪手怎么设置局域网啊、 我家小狗刚领来,没有名字,拜托大家起个名字。 护肤品代加工 水浒Q传跨服PK是怎么回事啊 新水浒Q传什么叫PK保护状态,上号不到一分钟就被打,求解 水浒Q传 为什么要pk有什么好处? 为什么贷款每次都审核失败 有谁能说一下手机贷审核不通过的原因吗?我都审核好多次了都不能通过... 贷款审核失败是什么原因 为什么贷款未通过审核 怎做好馒头 怎么设置html5中canvas绘制一个图形所需的时间 馒头的做法和配方的最简单的方法? 做好的馒头为什么吃起来粘牙? 馒头做好了蒸出来后皮子怎么都是皱的? 怎样可以做好馒头 怎么做好馒头 怎样做出来的馒头好吃? 做好的馒头怎么保存 做好的馒头要怎么保存 打印机理光8110出471-4怎么搞? 理光8110出现687-00是什么问题? 理光复印机的缺点是什么? 你好我得wifi手机能连接 笔记本电脑连接不上 如何设置,使安卓手机可以连接笔记本电脑实现无线... 手机屏幕怎么投到笔记本电脑 手机能连接笔记本电脑吗 手机蓝牙怎么连接笔记本电脑 手机连笔记本电脑怎么连接 手机如何连接笔记本电脑 在html5的canvas中怎么在画布上显示当前的时间 怎样把动态canvas时间效果显示桌面 js Canvas实现的日历时钟案例有哪些 用J2ME的canvas如何做到实时显示时间? smart canvas 如何调时间 Canvas是一个时间类还是一个画笔接口?(java问题) html5-canvas游戏中使用setinterval的时候在Androi... canvas前端动图如何实现 怎么样做出好吃的馒头 canvas怎么用js控制加载时间 怎样做馒头最好吃 canvas动画为什么用setTimeout不用setInterval 自己做馒头的详细步骤 HTML5用canvas怎么实现动画效果 自己做馒头的方法步骤 如何使用canvas实现多个随机圆运动 好吃的馒头怎么做好吃 使用canvas为什么要用easeljs 怎样做出好吃的馒头?? p5.js和html5 canvas两者有何区别?