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的html(data)方法与&amp;lt;script&amp;gt;脚本块的解决方法
Mar 09 Javascript
Javascript中的相等与不等运算
Apr 25 Javascript
Javascript异步表单提交,图片上传,兼容异步模拟ajax技术
May 10 Javascript
Ajax局部更新导致JS事件重复触发问题的解决方法
Oct 14 Javascript
Node.js开源应用框架HapiJS介绍
Jan 14 Javascript
Jquery网页内滑动缓冲导航的实现代码
Apr 05 Javascript
详解vue渲染函数render的使用
Dec 12 Javascript
微信小程序自定义tabBar组件开发详解
Sep 24 Javascript
浅谈js闭包理解
Apr 01 Javascript
基于AngularJS拖拽插件ngDraggable.js实现拖拽排序功能
Apr 02 Javascript
通过滑动翻页效果实现和移动端click事件问题
Jan 26 Javascript
JS 基本概念详细介绍
Oct 16 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/12/17 PHP
PHP中的插件机制原理和实例
2014/07/08 PHP
PHP定时执行任务实现方法详解(Timer)
2015/07/30 PHP
PHP随手笔记整理之PHP脚本和JAVA连接mysql数据库
2015/11/25 PHP
JS(jQuery)实现聊天接收到消息语言自动提醒功能详解【提示“您有新的消息请注意查收”】
2019/04/16 PHP
jquery1.4.2 for Visual studio 2010 模板文件
2010/07/14 Javascript
JavaScript中switch判断容易犯错的一个细节
2014/08/27 Javascript
浅析JavaScript中的变量复制、参数传递和作用域链
2016/01/13 Javascript
微信小程序 require机制详解及实例代码
2016/12/14 Javascript
JavaScript代码执行的先后顺序问题
2017/10/29 Javascript
js读取本地文件的实例
2017/12/22 Javascript
Vue实现拖放排序功能的实例代码
2019/07/08 Javascript
js面试题之异步问题的深入理解
2020/09/20 Javascript
JS中循环遍历数组的四种方式总结
2021/01/23 Javascript
[33:15]2018DOTA2亚洲邀请赛3月30日 小组赛B组 VP VS Mineski
2018/03/31 DOTA
Python中的__new__与__init__魔术方法理解笔记
2014/11/08 Python
使用Python中的cookielib模拟登录网站
2015/04/09 Python
python实现简易动态时钟
2018/11/19 Python
Python3.7 pyodbc完美配置访问access数据库
2019/10/03 Python
关于Tensorflow 模型持久化详解
2020/02/12 Python
Roots加拿大官网:加拿大休闲服饰品牌
2016/10/24 全球购物
Made in Design意大利:现代家具、名家灯具和装饰
2020/10/27 全球购物
简述数组与指针的区别
2014/01/02 面试题
平安建设实施方案
2014/03/19 职场文书
银行竞聘演讲稿
2014/05/16 职场文书
高中毕业典礼演讲稿
2014/09/09 职场文书
信息与计算机科学职业规划范文:成为一艘有方向的船
2014/09/11 职场文书
民事赔偿协议书
2014/11/02 职场文书
工作违纪检讨书范文
2015/01/26 职场文书
自愿离婚协议书范本
2015/01/26 职场文书
体育活动总结
2015/02/04 职场文书
django注册用邮箱发送验证码的实现
2021/04/18 Python
星际争霸:毕姥爷vs解冻01
2022/04/01 星际争霸
永中文档在线转换预览基于nginx配置部署方案
2022/06/10 Servers
win10电脑双屏显示一个黑屏怎么办?win10电脑双屏显示一个黑屏解决方法
2022/07/15 数码科技