公告栏添加时钟——利用canvas画出一个时钟
前言
最近在学习HTML5标签,学到Canvas,觉得很有趣。便在慕课网找了个demo练手。就是Canvas时钟。
对于canvas,w3shcool上是这么描述的:
HTML5 <canvas> 标签用于绘制图像(通过脚本,通常是 JavaScript)。
不过,<canvas> 元素本身并没有绘制能力(它仅仅是图形的容器) - 您必须使用脚本来完成实际的绘图任务。
getContext() 方法可返回一个对象,该对象提供了用于在画布上绘图的方法和属性。
示例

动态可看公告栏状态
正文
1.代码部分
html代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Time</title>
<style type="text/css">
#clockdiv{
text-align: center;
}
</style>
</head>
<body>
<div id="clockdiv">
<canvas id="dom" width="200" height="200">您的浏览器不兼容canvas</canvas>
<script type="text/javascript" src="Clock.js"></script>
</body>
</html>
js代码
var canvas = document.getElementById('dom');
var context = canvas.getContext('2d');
var height = context.canvas.height;
var width = context.canvas.width;
var r = width / 2;
var rem = width/200;
//时钟背景
function drawBackground() {
context.save();
context.translate(r, r);
context.beginPath();
context.lineWidth = 8*rem;
context.strokeStyle = "#000"
context.arc(0, 0, r - 5*rem, 0, 2 * Math.PI, false);
context.stroke();
context.closePath();
//遍历小时数
var houseNumble = [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2];
houseNumble.forEach(function (number, i) {
context.textAlign = 'center';
context.textBaseline = 'middle'
context.font = 18*rem+'px Arial'
var rad = 2 * Math.PI / 12 * i;
var x = Math.cos(rad) * (r - 30*rem);
var y = Math.sin(rad) * (r - 30*rem);
context.fillText(number, x, y);
})
//定义刻度
for (var i = 0; i < 60; i++) {
var rad = 2 * Math.PI / 60 * i;
var x = Math.cos(rad) * (r - 18*rem);
var y = Math.sin(rad) * (r - 18*rem);
context.beginPath();
if (i % 5 == 0) {
context.fillStyle = "#000"
context.arc(x, y, 2*rem, 0, 2 * Math.PI);
} else {
context.fillStyle = "#ccc"
context.arc(x, y, 2*rem, 0, 2 * Math.PI);
}
context.fill();
context.closePath();
}
}
//定义时针
function drawHour(hour,minute) {
context.save();
context.beginPath();
context.lineWidth = 6*rem;
context.lineCap = 'round'
var rad = 2 * Math.PI / 12 * hour;
var mrad = 2* Math.PI/12/60 * minute;
context.rotate(rad+mrad);
context.moveTo(0, 10*rem);
context.lineTo(0, -r / 2);
context.stroke();
context.restore();
}
//定义分针
function drawMinute(minute) {
context.save();
context.beginPath();
context.lineWidth = 3*rem;
context.lineCap = 'round';
var rad = 2 * Math.PI / 60 * minute;
context.rotate(rad);
context.moveTo(0, 15*rem);
context.lineTo(0, -r + 34)
context.stroke();
context.restore();
}
//定义秒钟
function drawSecond(second) {
context.save();
context.beginPath();
context.lineWidth = 2*rem;
context.lineCap = 'round';
context.fillStyle = "red"
var rad = 2 * Math.PI / 60 * second;
context.rotate(rad);
context.moveTo(-2 ,20);
context.lineTo( 2, 20);
context.lineTo( 1, -r + 18);
context.lineTo( -1, -r + 18);
context.fill();
context.restore();
}
//画中心点
function drawDot() {
context.beginPath();
context.fillStyle = "#fff"
context.arc(0, 0, 4*rem, 0, 2 * Math.PI, false);
context.fill();
}
//时间函数,让时钟根据当前时间跳动
function Draw() {
context.clearRect(0,0,width,height);
var time= new Date();
var hour =time.getHours();
var minute = time.getMinutes();
var second = time.getSeconds();
drawBackground();
drawHour(hour,minute);
drawMinute(minute);
drawSecond(second);
drawDot();
context.restore()
}
Draw();
//刷新时钟
setInterval(Draw,1000);
注意事项:1.有可能浏览器不现实效果,原因一:浏览器不兼容,会显示您的浏览器不兼容canvas。原因二:代码出错。
2.<canvas>标签最好不要使用CSS来定义长度大小。
3.js中函数顺序不能乱,否则会被清除而没有效果。
4.代码里高度宽度均为具体px值,画布大小会影响时钟美观(解决方案:设置一个比例变量,其值为 rem=width/200 ,将高度宽度用变量值 rem 来代替)。
2.给博客园公告栏添加时钟样式
1.公告栏先需要申请JS权限。(点击管理—设置—申请JS权限)
2.将自己的JS文件上传到博客的文件(点击管理—文件)里,得到地址,以下是我文件里的地址。(大家可以直接使用)
http://files.cnblogs.com/files/abao0/Clock.js
3.将下面代码贴入博客侧边栏公告。
<div id="clockdiv">
<canvas id="dom" width="200" height="200">您的浏览器不兼容canvas</canvas>
</div>
<script type="text/javascript" src="Clock.js"></script>
4.将下面代码贴入页面定制CSS代码。(加个DIV是为了使时钟在不同博客样式中的公告栏中居中显示)
#clockdiv {
text-align: center;
}
5.自定义你的样式,显示不同风格。
后记
动手做完一个demo会让自己更有收获,赶紧动起手来吧。
公告栏添加时钟——利用canvas画出一个时钟的更多相关文章
- 利用LineRenderer画出一个圆,类似于lol中的攻击范围
http://www.unity蛮牛.com/blog-5945-1409.html 本人大四狗,学unity半年有余,写此文章纯粹记录自己的心得. 废话不多说,进入主题.... 效果如图: 首先要理 ...
- 10分钟,利用canvas画一个小的loading界面
首先利用定义下canvas得样式 <canvas width="1024" height="720" id="canvas" styl ...
- 如何在canvas中画出一个太极图
先放一个效果图: 代码如下 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /&g ...
- Android利用canvas画各种图形
Android利用canvas画各种图形(点.直线.弧.圆.椭圆.文字.矩形.多边形.曲线.圆角矩形) 本文链接:https://blog.csdn.net/rhljiayou/article/det ...
- 樱花的季节,教大家用canvas画出飞舞的樱花树
又到了樱花的季节,教大家使用canvas画出飞舞的樱花树效果. 废话少说,先看效果. 演示效果地址:http://suohb.com/work/tree4.htm 查看演示效果 第一步,我们先画出一棵 ...
- 利用python画出动态高优先权优先调度
之前写过一个文章. 利用python画出SJF调度图 动态高度优先权优先调度 动态优先权调度算法,以就绪队列中各个进程的优先权作为进程调度的依据.各个进程的优先权在创建进程时所赋予,随着进程的推进或其 ...
- WPF Blend 脑洞大开的问题:如何用Blend得到或画出一个凹槽、曲面。
原文:WPF Blend 脑洞大开的问题:如何用Blend得到或画出一个凹槽.曲面. 目标图: 步骤一(放置一个矩形,填充蓝色): 步骤二(复制该矩形,并调整边角,填充粉红色): 第三部:让图形部分重 ...
- 用HTML+CSS画出一个同心圆
参加web前端校招的同学们经常会遇到这样的面试题:用HTML+CSS画出一个同心圆. 例如: 这道题主要考验的是基础盒模型布局能力和倒圆角属性的巧用. 1.html代码 <body> &l ...
- Android利用canvas画各种图形(点、直线、弧、圆、椭圆、文字、矩形、多边形、曲线、圆角矩形) .
1.首先说一下canvas类: Class Overview The Canvas class holds the "draw" calls. To draw something, ...
随机推荐
- linux集群时间同步搭建
http://xstarcd.github.io/wiki/sysadmin/ntpd.html http://www.voidcn.com/blog/xuxudede1989/article/p-4 ...
- oc字符串与c字符串转换和拷贝
// Helper method to create C string copy NSString* MakeNSString (const char* string) { if (string) { ...
- 437. Path Sum III
原题: 437. Path Sum III 解题: 思路1就是:以根节点开始遍历找到适合路径,以根节点的左孩子节点开始遍历,然后以根节点的右孩子节点开始遍历,不断循环,也就是以每个节点为起始遍历点 代 ...
- 23.网络.md
目录 1.基本概念 2.常用函数 3.端口 4.协议 4.1.2代码步骤 4.1.3UDPDemo 4.1.4通信格式 4.1.5 群发Demo: 4.1.6丢失数据的情况 4.2TCP 4.2.1三 ...
- C++ AfxBeginThread的介绍/基本用法
AfxBeginThread 用户界面线程和工作者线程都是由AfxBeginThread创建的.现在,考察该函数:MFC提供了两个重载版的AfxBeginThread,一个用于用户界面线程,另一 ...
- C# Liseview的使用方法之一:滚动到选中的行
listview.items[i].EnsureVisible();//滚动到你想要显示出来的行上. 其中,listview.items[i]就是你想要显示的行.
- 当点击回车键后form表单就可提交的实现
$('#myform').find('input').on('keyup',function(event){ if(event.keyCode == 13){ $('#myform').submit( ...
- 吴裕雄 python 机器学习-NBYS(2)
import matplotlib import numpy as np import matplotlib.pyplot as plt n = 1000 xcord0 = [] ycord0 = [ ...
- python中的全局变量和局部变量(转)
python中,对于变量作用域的规定有些不一样. 在诸如C/C++.java等编程语言中,默认在函数的内部是能够直接訪问在函数外定义的全局变量的,可是这一点在python中就会有问题.以下是一个样例. ...
- tensorflow的save和restore
使用tensorflow中的save和restore可以对模型进行保存和恢复 import tensorflow as tf v1 = tf.Variable(tf.random_normal([1, ...