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 Date概念详细介绍
Nov 22 Javascript
JavaScript点击按钮后弹出透明浮动层的方法
May 11 Javascript
Javascript常用小技巧汇总
Jun 24 Javascript
基于jQuery实现的仿百度首页滑动选项卡效果代码
Nov 16 Javascript
jQuery each函数源码分析
May 25 Javascript
jQuery事件委托之Safari
Jul 05 Javascript
通过说明与示例了解js五种设计模式
Jun 17 Javascript
Vue 实现点击空白处隐藏某节点的三种方式(指令、普通、遮罩)
Oct 23 Javascript
node.js中npm包管理工具用法分析
Feb 14 Javascript
JS实现多选框的操作
Jun 24 Javascript
在vue-cli3中使用axios获取本地json操作
Jul 30 Javascript
Java 生成随机字符的示例代码
Jan 13 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源代码安装常见错误与解决办法分享
2013/05/28 PHP
smarty表格换行实例
2014/12/15 PHP
php版微信开发Token验证失败或请求URL超时问题的解决方法
2016/09/23 PHP
php的laravel框架快速集成微信登录的方法
2016/12/12 PHP
解决Laravel无法使用COOKIE和SESSION的问题
2019/10/16 PHP
用jquery实现学校的校历(asp.net+jquery ui 1.72)
2010/01/01 Javascript
Draggable Elements 元素拖拽功能实现代码
2011/03/30 Javascript
jquery实现点击弹出带标题栏的弹出层(从右上角飞入)效果
2015/09/19 Javascript
BootStrap的Datepicker控件使用心得分享
2016/05/25 Javascript
AngualrJs清除定时器遇到的坑
2017/10/13 Javascript
微信小程序wepy框架笔记小结
2018/08/08 Javascript
详解vue服务端渲染浏览器端缓存(keep-alive)
2018/10/12 Javascript
jQuery移动端跑马灯抽奖特效升级版(抽奖概率固定)实现方法
2019/01/18 jQuery
js使用cookie实现记住用户名功能示例
2019/06/13 Javascript
详解为element-ui的Select和Cascader添加弹层底部操作按钮
2020/02/07 Javascript
vue-cli3 热更新配置操作
2020/09/18 Javascript
python开发之文件操作用法实例
2015/11/13 Python
Python+OpenCV让电脑帮你玩微信跳一跳
2018/01/04 Python
django反向解析和正向解析的方式
2018/06/05 Python
python的pandas工具包,保存.csv文件时不要表头的实例
2018/06/14 Python
pygame实现雷电游戏雏形开发
2018/11/20 Python
Django表单提交后实现获取相同name的不同value值
2020/05/14 Python
Python爬虫JSON及JSONPath运行原理详解
2020/06/04 Python
CSS3弹性盒模型flex box快速入门心得(必看篇)
2016/05/24 HTML / CSS
美国领先的户外服装与装备用品店:Moosejaw
2016/08/25 全球购物
Araks官网:纽约内衣品牌
2020/10/15 全球购物
哪些情况下不应该使用索引
2015/07/20 面试题
会议活动邀请函
2014/01/27 职场文书
忠诚奉献演讲稿
2014/09/12 职场文书
部门经理迟到检讨书
2015/02/16 职场文书
2015年度校学生会工作总结报告
2015/05/23 职场文书
少先队中队工作总结
2015/08/14 职场文书
30岁前绝不能错过的10本书
2019/08/08 职场文书
2019员工保密协议书(3篇)
2019/09/23 职场文书
golang 在windows中设置环境变量的操作
2021/04/29 Golang
MySQL RC事务隔离的实现
2022/03/31 MySQL