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 相关文章推荐
jquery form 加载数据示例
Apr 21 Javascript
浅析JS操作DOM的一些常用方法
May 13 Javascript
全面解析Bootstrap中Carousel轮播的使用方法
Jun 13 Javascript
关于backbone url请求中参数带有中文存入数据库是乱码的快速解决办法
Jun 13 Javascript
js中window.open的参数及注意注意事项
Jul 06 Javascript
angularJS 如何读写缓冲的方法(推荐)
Aug 06 Javascript
Javascript中 带名 匿名 箭头函数的重要区别(推荐)
Jan 29 Javascript
vue2.0父子组件间通信的实现方法
Apr 19 Javascript
微信小程序图片横向左右滑动案例
May 19 Javascript
基于Vue制作组织架构树组件
Dec 06 Javascript
Vue自定义指令写法与个人理解
Feb 09 Javascript
layui按条件隐藏表格列的实例
Sep 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 提速工具eAccelerator 配置参数详解
2010/05/16 PHP
PHP操作MongoDB时的整数问题及对策说明
2011/05/02 PHP
jQuery EasyUI API 中文文档 - DateBox日期框
2011/10/15 PHP
浅析THINKPHP的addAll支持的最大数据量
2015/02/03 PHP
WordPress开发中用于获取近期文章的PHP函数使用解析
2016/01/05 PHP
php中final关键字用法分析
2016/12/07 PHP
JQuery从头学起第三讲
2010/07/06 Javascript
js判断输入是否为正整数、浮点数等数字的函数代码
2010/11/17 Javascript
JavaScript性能陷阱小结(附实例说明)
2010/12/28 Javascript
jQuery解析Json实例详解
2015/11/24 Javascript
浅谈jQuery效果函数
2016/09/16 Javascript
微信小程序 后台登录(非微信账号)实例详解
2017/03/31 Javascript
使用vue点击li,获取当前点击li父辈元素的属性值方法
2018/09/12 Javascript
jQuery选择器选中最后一个元素,倒数第二个元素操作示例
2018/12/10 jQuery
js变量值传到php过程详解 将php解析成数据
2019/06/26 Javascript
JS严格模式原理与用法实例分析
2020/04/27 Javascript
Python实现拷贝多个文件到同一目录的方法
2016/09/19 Python
python程序控制NAO机器人行走
2019/04/29 Python
Python Django Vue 项目创建过程详解
2019/07/29 Python
Django 实现xadmin后台菜单改为中文
2019/11/15 Python
利用Python制作动态排名图的实现代码
2020/04/09 Python
Python 使用xlwt模块将多行多列数据循环写入excel文档的操作
2020/11/10 Python
Theory美国官网:后现代都市风时装品牌
2018/05/09 全球购物
游戏商店:Eneba
2020/04/25 全球购物
explicit和implicit的含义
2012/11/15 面试题
力学专业毕业生自荐信
2013/11/17 职场文书
CNC数控操作工岗位职责
2013/11/19 职场文书
捐助贫困学生倡议书
2014/05/16 职场文书
端午节活动总结
2014/08/26 职场文书
中学教师暑期培训方案
2014/08/27 职场文书
2014年纠风工作总结
2014/12/08 职场文书
2014年语文教学工作总结
2014/12/17 职场文书
长城导游词
2015/01/30 职场文书
停电放假通知
2015/04/14 职场文书
讲文明倡议书
2015/04/29 职场文书
记者节感言
2015/08/03 职场文书