使用canvas绘制时钟

使用canvas绘制时钟

   什么使canvas呢?HTML5 <canvas> 元素用于图形的绘制,通过脚本 (通常是JavaScript)来完成。<canvas> 标签只是图形容器,所以我们必须使用脚本来绘制图形。通过它可以绘制路径,盒、圆、字符以及添加图像等等。

  常用的API

     这篇博文,我将通过html5中的canvas元素绘制一个走动的时钟。

  html代码如下:

		<canvas id="clock" width="200" height="200" style="border:1px solid #ff0000;"></canvas>

  其中id这个属性是必须要添加的,因为后面在JavaScript脚本中,我们会通过它来获得这个元素。 注意到width和height都是没有单位的,默认为px。 且<canvas>元素是没有内容的,当然,也可以写一些内容,对于不支持canvas标签的浏览器来说,它会显示其中的内容,而对于支持canvas标签的浏览器而言,其中的内容会被自动忽略。故其效果和<noscript>标签是一样的。我们还可以通过style属性来为canvas画布添加一个边框,这样就可以直接在页面中看到效果了。

  注意:canvas元素默认是inline。

  JavaScript代码如下:

window.οnlοad=function(){var clock=document.getElementById("clock").getContext('2d');//通过获取canvas元素获取2d上下文var width=clock.canvas.width;//得到画布的宽度var height=clock.canvas.height;//得到花布的高度var r=width/2;//得到将要画的时钟的半径var prop=width/150;//在此保留比例,以便于在更换画布大小时调节function outline(){clock.save();//保存当前状态clock.translate(r,r);//将原点移动到(r,r)处clock.beginPath();//每个函数内部都要有beginPath()方法clock.lineWidth=3*prop;//通过lineWidth来设置划线的宽度,注意这里没有单位clock.arc(0,0,r-clock.lineWidth/2,0,2*Math.PI,false);clock.stroke();//绘制路径var scaleNumbers=[3,4,5,6,7,8,9,10,11,12,1,2];clock.font=12*prop+"px Arial";//通过font来设置字体的大小。关键:一定单位px,且后面一定要有字体样式clock.textAlign="center";//设置位水平居中clock.textBaseline="middle";//设置位垂直居中	scaleNumbers.forEach(function(number,i){//遍历数组var rad=2*Math.PI/12*i;var x=Math.cos(rad)*(r-15*prop);var y=Math.sin(rad)*(r-15*prop);clock.fillText(number,x,y);//在x y处绘制number});for(var i=0;i<=60;i++){var rad=2*Math.PI/60*i;var x=Math.cos(rad)*(r-7*prop);var y=Math.sin(rad)*(r-7*prop);clock.beginPath();if(i%5===0){clock.fillStyle="red";//填充的颜色clock.arc(x,y,1*prop,0,2*Math.PI,false);}else{clock.fillStyle="black";clock.arc(x,y,1*prop,0,2*Math.PI,false);}clock.fill();}}function hours(hour,minute){clock.save();//一定要先保存clock.beginPath();var rad=2*Math.PI/12*hour;var minute_rad=2*Math.PI/12/60*minute;clock.rotate(rad+minute_rad);clock.strokeStyle="blue";clock.lineCap="round";clock.lineWidth=5*prop;clock.moveTo(0,2*prop);clock.lineTo(0,-r+40*prop);clock.stroke();clock.restore();//恢复}function minutes(minute){clock.save();clock.beginPath();clock.strokeStyle="orange";//设置路径的颜色clock.lineWidth=4*prop;clock.lineCap="round";//设置线的样式var rad=2*Math.PI/60*minute;clock.rotate(rad);//旋转画布clock.moveTo(0,5*prop);//将“画笔”移动到(这里没有绘画)clock.lineTo(0,-r+25*prop);clock.stroke();clock.restore();}function seconds(second){clock.save();clock.beginPath();clock.fillStyle="red";var rad=2*Math.PI/60*second;clock.rotate(rad);clock.moveTo(-2*prop,5*prop);clock.lineTo(2*prop,5*prop);clock.lineTo(1*prop,-r+18*prop);clock.lineTo(3*prop,-r+18*prop);clock.lineTo(0,-r+10*prop);clock.lineTo(-3*prop,-r+18*prop);clock.lineTo(-1*prop,-r+18*prop);clock.fill();clock.restore();}function middle_dot(){clock.beginPath();clock.fillStyle="white";clock.arc(0,0,5*prop,0,2*Math.PI,false);clock.fill();}function all(){clock.clearRect(0,0,width,height);outline();middle_dot();var now=new Date();//通过Date对象获取时间var hour=now.getHours();//获取当前小时数var minute=now.getMinutes();var second=now.getSeconds();hours(hour,minute);minutes(minute);seconds(second);clock.restore();}all();setInterval(all,1000);//使用定时器不断更新时间};

  这样,一个canvas绘制的时钟就完成了。看看最后的效果图吧:

  

转载于:https://www.cnblogs.com/zhuzhenwei918/p/6058768.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/394687.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Visual Studio 2017创建XAML文件

Visual Studio 2017创建XAML文件在Visual Stuido 2015中&#xff0c;在已经创建好的项目中添加XAML文件&#xff0c;只要右击项目&#xff0c;单击“添加”|“新建项”命令&#xff0c;然后从“添加新项”对话框中&#xff0c;选择“Cross-Platform”|“Forms Xaml Page”选项即…

android 安装assets中的apk,如何安装assets下apk,附源码(原创)

publicstaticvoidInstall(Context ctx, String strLocalFile) {Intent intentInstallnewIntent();String apkPath"/data/data/"ctx.getPackageName()"/files";String apkName"yuan.apk";File filenewFile(apkPath, apkName);try{//assets下对于超…

FtpWebRequest.UsePassive属性:设置FTP工作模式

默认值&#xff1a;true&#xff0c;被动模式 PASV&#xff08;被动&#xff09;方式的连接过程是&#xff1a;客户端向服务器的FTP端口&#xff08;默认是21&#xff09;发送连接请求&#xff0c;服务器接受连接&#xff0c;建立一条命令链路。 当需要传送数据时&#xff0c; …

angular面试题及答案_关于最流行的Angular问题的StackOverflow上的48个答案

angular面试题及答案by Shlomi Levi通过Shlomi Levi 关于最流行的Angular问题的StackOverflow上的48个答案 (48 answers on StackOverflow to the most popular Angular questions) I gathered the most common questions and answers from Stackoverflow. These questions we…

c++分治法求最大最小值实现_最优化计算与matlab实现(12)——非线性最小二乘优化问题——G-N法...

参考资料《精通MATLAB最优化计算&#xff08;第二版&#xff09;》编程工具Matlab 2019a目录石中居士&#xff1a;最优化计算与Matlab实现——目录​zhuanlan.zhihu.com非线性最小二乘优化问题非线性最小二乘优化也叫无约束极小平方和函数问题&#xff0c;它是如下无约束极小问…

win7 IIS7环境下部署PHP 7.0

最近在本机电脑win7 II7环境下部署PHP 7.0遇到一些问题&#xff0c;将之记录下来 简要步骤如下&#xff1a; 1、到php官网下载php&#xff0c;由于是IIS环境要下载非线程安全的版本&#xff0c;我下载的是7.0.13 2、解压到本地文件目录下 3、通过控制台进入到php文件目录&#…

《Oracle高性能自动化运维》一一3.3 Redo产生场景

3.3 Redo产生场景我们知道&#xff0c;Oracle Redo是以条目&#xff08;Redo Entries/Records&#xff09;的形式记录数据库的所有更改操作&#xff08;OP&#xff09;。更改操作主要包括&#xff1a;数据库物理文件更改&#xff1a;主要指的是数据库物理文件的增减等操作&…

智能算法(GA、DBO等)求解零空闲流水车间调度问题(NIFSP)

先做一个声明&#xff1a;文章是由我的个人公众号中的推送直接复制粘贴而来&#xff0c;因此对智能优化算法感兴趣的朋友&#xff0c;可关注我的个人公众号&#xff1a;启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法&#xff0c;经典的&#xff0c;或者是近几年…

《构建之法》读后感 二

个人感受部分&#xff1a; 01. 过去的我对自己的职业没有一个规划&#xff0c;认为读大学就是拿毕业证&#xff0c;至于以后找到什么样的工作从来没有考虑过。在拿到一个软件作业时&#xff0c;总是在设计阶段就把它想得特别完美&#xff0c;想让他没有任何出错的做出来&#x…

android 简单实现圆角,Android 实现圆角图片的简单实例

Android 实现圆角图片的简单实例实现效果图&#xff1a;本来想在网上找个圆角的例子看一看&#xff0c;不尽人意啊&#xff0c;基本都是官方的Demo的那张原理图&#xff0c;稍后会贴出。于是自己自定义了个View&#xff0c;实现图片的圆角以及圆形效果。效果图&#xff1a;Andr…

zookeeper介绍及集群的搭建(利用虚拟机)

ZooKeeper ​   ZooKeeper是一个分布式的&#xff0c;开放源码&#xff08;apache&#xff09;的分布式应用程序协调服务&#xff0c;是Google的Chubby一个开源的实现&#xff0c;是Hadoop和Hbase、dubbox、kafka的重要组件。它主要用来解决分布式集群中应用系统的一致性问题…

pythondict初始化_利用defaultdict对字典进行全局初始化。

通常我们在操作字典时&#xff0c;如果读取的键未被初始化&#xff0c;则会抛出KeyError的错误&#xff0c;这个是我们都很熟悉的。那么一般的解决方式是使用异常处理或者是调用字典的get方法来避免出现这个异常。 可以看到&#xff0c;这两种写法都比较繁琐&#xff0c;第二种…

标准库类型String

定义和初始化string对象 初始化string对象方式 string s1 默认初始化&#xff0c;s1是一个空串 string s2(s1) s2是s1的副本 string s2 s1 等价于s2(s1), s2是s1的副本 string s3("value") s3是字面值"value"的副本&#xff0c;除了字面值最后的那个…

轻量级数据库中间件利器Sharding-JDBC深度解析(有彩蛋)

讲师介绍张亮 当当架构部总监 负责分布式中间件和私有云平台建设 目前主导开源项目&#xff1a;Elastic-Job及Sharding-JDBC 主题简介&#xff1a; 1、关系型数据库中间件核心功能介绍 2、Sharding-JDBC架构及内核解析 3、Sharding-JDBC未来展望 一、关系型数据库中间件核心功…

python字典嵌套字典的情况下获取某个key的value

最近在用python写接口的测试程序&#xff0c;期间用到解析字典获取某个key的value&#xff0c;由于多个接口返回的字典格式不是固定的并存在多层嵌套的情况。在字典的方法中也没有找到可直接达到目的的方法(也可能是我对字典的方法了解的不深的缘故)&#xff0c;于是自己写了个…

系统在此应用程序堆栈溢出_从部署我的第一个完整堆栈Web应用程序中学到的经验教训...

系统在此应用程序堆栈溢出by Will Abramson威尔艾布拉姆森(Will Abramson) 从部署我的第一个完整堆栈Web应用程序中学到的经验教训 (Lessons learned from deploying my first full-stack web application) I recently achieved one of my long-term goals: deploying my firs…

const 常量_条款03:尽可能使用const

const 允许你指定一个语义约束&#xff08;也就是指定一个“不该被改动”的对象&#xff09;&#xff0c;而编译器会强制实施这项约束。1、const指针如果关键字const出现在星号左边&#xff0c;表示被指物是常量&#xff1b;如果出现在星号右边&#xff0c;表示指针自身是常量&…

javascript高级程序设计---js事件思维导图

绘制思维软件与平时用的笔记&#xff0c;以及导出功能&#xff0c;这三个问题综合起来&#xff0c;于是我把思维导图分开画 1、js事件的基本概念 2、js事件的事件处理程序 3、js事件的事件对象 转载于:https://www.cnblogs.com/Jamie1032797633/p/10567419.html

jq挑战30天——打字机效果+小程序

<!doctype html><html><head><meta charset"utf-8"><title>基于jQuery实现的打字机效果-jq22.com</title><script src"http://libs.baidu.com/jquery/1.11.3/jquery.min.js"></script><style></…

和 Thrift 的一场美丽邂逅

一. 与 Thrift 的初识 也许大多数人接触 Thrift 是从序列化开始的。每次搜索 “java序列化” “方式”、“对比” 或 “性能” 等关键字时&#xff0c;搜索引擎总是会返回一大堆有关各种序列化方式的使用方法或者性能对比的结果给你&#xff0c;而其中必定少不了 Thrift&#…