JavaScript canvas动画实现时钟效果


Posted in Javascript onFebruary 10, 2020

本文实例为大家分享了canvas动画实现时钟效果的具体代码,供大家参考,具体内容如下

JavaScript canvas动画实现时钟效果

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>时钟特效</title>
</head>
<body>
  <canvas width="150" height="150" id="canvas"></canvas>
</body>
</html>
<script>
  clock();// 显示
  setInterval(clock,1000);// 每一秒重绘一次,达到转动效果
  function clock(){
    var now = new Date();// 得到当前日期与时间
    var second = now.getSeconds(),
      min = now.getMinutes(),
      hour = now.getHours();// 得到时分秒
      hour = hour > 12?hour-12:hour;
    var canvas = document.getElementById('canvas');
    var ctx = canvas.getContext('2d');
    ctx.clearRect(0,0,150,150);// 初始化画布
    ctx.save();
    ctx.translate(75,75);// 平移坐标原点
    ctx.scale(0.4,0.4);//缩放效果
    ctx.rotate(-Math.PI/2);// 将x轴旋转-90
    ctx.strokeStyle = 'black';
    ctx.fillStyle = 'black';
    ctx.lineWidth = 8;
    ctx.lineCap = 'round';

    // 显示时针刻度
    ctx.save();
    ctx.beginPath();
    for(var i = 0;i<12;i++)
    {
      ctx.rotate(Math.PI/6);
      ctx.moveTo(100,0);
      ctx.lineTo(120,0);
    }
    ctx.stroke();
    ctx.closePath();
    ctx.restore();// 恢复
    ctx.save();
    
    // 显示秒针刻度
    ctx.beginPath();
    ctx.lineWidth = 5;
    for(var i = 0;i < 60; i++)
    {
      if(i % 5 != 0)
      {
        ctx.moveTo(117,0);
        ctx.lineTo(120,0);
      }
      ctx.rotate(Math.PI/30);// 转6度
    }
    ctx.stroke();
    ctx.closePath();
    ctx.restore();// 恢复
    ctx.save();

    // 绘制时针
    ctx.beginPath();
    ctx.rotate((Math.PI / 6)*hour + (Math.PI/360)*min + (Math.PI /21600)*second)//时针当前指向的位置
    ctx.lineWidth = 14;
    ctx.moveTo(-20,0);
    ctx.lineTo(75,0);
    ctx.stroke();
    ctx.closePath();
    ctx.restore();//恢复
    ctx.save();

    // 绘制分针
    ctx.beginPath();
    ctx.strokeStyle = 'black';
    ctx.lineWidth = 10;
    ctx.rotate((Math.PI/30)*min + (Math.PI/1800)*second);// 分针当前的位置
    ctx.moveTo(-28,0);
    ctx.lineTo(102,0);
    ctx.stroke();
    ctx.closePath();
    ctx.restore();//恢复
    ctx.save();


    // 绘制秒针
    ctx.beginPath();
    ctx.rotate(Math.PI/30*second);
    ctx.strokeStyle = '#D40000';
    ctx.lineWidth = 6;
    ctx.moveTo(-30,0);
    ctx.lineTo(83,0);
    ctx.stroke();
    ctx.closePath();
    ctx.restore();//恢复
    ctx.save();

    //绘制表框
    ctx.beginPath();
    ctx.lineWidth = 4;
    ctx.strokeStyle = '#325Fa2';
    ctx.arc(0,0,142,0,Math.PI*2,true);//半径142
    ctx.stroke();
    ctx.closePath();
    ctx.restore()//恢复
    ctx.restore()//恢复


  }
</script>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js登录弹出层特效
Mar 07 Javascript
JS小游戏之象棋暗棋源码详解
Sep 25 Javascript
JavaScript中使用Math.floor()方法对数字取整
Jun 15 Javascript
基于jquery实现轮播特效
Apr 22 Javascript
浅谈JavaScript对象与继承
Jul 10 Javascript
AngularJS指令详解及示例代码
Aug 16 Javascript
Bootstrap的fileinput插件实现多文件上传的方法
Sep 05 Javascript
JavaScript面试题(指针、帽子和女朋友)
Nov 23 Javascript
Angular.JS中指令ng-if的注意事项小结
Jun 21 Javascript
js实现一个简易计算器
Mar 30 Javascript
这15个Vue指令,让你的项目开发爽到爆
Oct 11 Javascript
解决elementUI 切换tab后 el_table 固定列下方多了一条线问题
Jul 19 Javascript
JavaScript canvas仿代码流瀑布
Feb 10 #Javascript
Vue数字输入框组件使用方法详解
Feb 10 #Javascript
JavaScript canvas实现跟随鼠标事件
Feb 10 #Javascript
JavaScript实现简易聊天对话框(加滚动条)
Feb 10 #Javascript
node.js使用 http-proxy 创建代理服务器操作示例
Feb 10 #Javascript
node.js中 redis 的安装和基本操作示例
Feb 10 #Javascript
js实现登录拖拽窗口
Feb 10 #Javascript
You might like
PHP脚本数据库功能详解(下)
2006/10/09 PHP
数组与类使用PHP的可变变量名需要的注意的问题
2013/06/20 PHP
浅析PHP微信支付通知的处理方式
2014/05/25 PHP
PHP+jQuery 注册模块的改进(一):验证码存入SESSION
2014/10/14 PHP
php遍历删除整个目录及文件的方法
2015/03/13 PHP
PHP图形操作之Jpgraph学习笔记
2015/12/25 PHP
ECshop 迁移到 PHP7版本时遇到的兼容性问题
2016/02/15 PHP
IE6下通过a标签点击切换图片的问题
2010/11/14 Javascript
使用Firebug对js进行断点调试的图文方法
2011/04/02 Javascript
NodeJS url验证(url-valid)的使用方法
2013/11/18 NodeJs
js验证IP及子网掩码的合法性有效性示例
2014/04/30 Javascript
JS+CSS实现鼠标滑过时动态翻滚的导航条效果
2015/09/24 Javascript
Bootstrap基本组件学习笔记之导航(10)
2016/12/07 Javascript
Angular2 之 路由与导航详细介绍
2017/05/26 Javascript
使用bootstraptable插件实现表格记录的查询、分页、排序操作
2017/08/06 Javascript
原生JS实现日历组件的示例代码
2017/09/22 Javascript
在Node.js中将SVG图像转换为PNG,JPEG,TIFF,WEBP和HEIF格式的方法
2019/08/22 Javascript
JS禁用右键、禁用Ctrl+u、禁用Ctrl+s、禁用F12的实现代码
2020/12/01 Javascript
Vue+axios封装请求实现前后端分离
2020/10/23 Javascript
[01:01:36]Optic vs paiN 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python中使用ElementTree解析XML示例
2015/06/02 Python
python并发2之使用asyncio处理并发
2017/12/21 Python
python3解析库pyquery的深入讲解
2018/06/26 Python
python 使用re.search()筛选后 选取部分结果的方法
2018/11/28 Python
Python Collatz序列实现过程解析
2019/10/12 Python
python读取raw binary图片并提取统计信息的实例
2020/01/09 Python
在python里使用await关键字来等另外一个协程的实例
2020/05/04 Python
浅谈pandas dataframe对除数是零的处理
2020/07/20 Python
详解Python中@staticmethod和@classmethod区别及使用示例代码
2020/12/14 Python
移动端HTML5实现文件上传功能【附代码】
2016/03/25 HTML / CSS
Timberland法国官网:购买靴子、鞋子、衣服、夹克和配饰
2019/11/30 全球购物
什么是岗位职责
2013/11/12 职场文书
正风肃纪剖析材料范文
2014/10/10 职场文书
工伤认定行政答辩状
2015/05/22 职场文书
运动会加油稿30字
2015/07/21 职场文书
Python中生成随机数据安全性、多功能性、用途和速度方面进行比较
2022/04/14 Python