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动态添加 input type=file的实现代码
Jun 14 Javascript
jquery日历控件实现方法分享
Mar 07 Javascript
基于jQuery实现动态数字展示效果
Aug 12 Javascript
jQuery简单实现input文本框内灰色提示文本效果的方法
Dec 02 Javascript
不间断循环滚动效果的实例代码(必看篇)
Oct 08 Javascript
JS获取IE版本号与HTML设置IE文档模式的方法
Oct 09 Javascript
BootStrap CSS全局样式和表格样式源码解析
Jan 20 Javascript
微信小程序页面间通信的5种方式
Mar 31 Javascript
JS排序算法之希尔排序与快速排序实现方法
Dec 12 Javascript
vue 组件中添加样式不生效的解决方法
Jul 06 Javascript
jquery获取img的src值实例介绍
Jan 16 jQuery
基于element-ui封装可搜索的懒加载tree组件的实现
May 22 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中在数据库中保存Checkbox数据(2)
2006/10/09 PHP
PHP 高手之路(一)
2006/10/09 PHP
用PHP和Shell写Hadoop的MapReduce程序
2014/04/15 PHP
PHP一个简单的无需刷新爬虫
2019/01/05 PHP
jQuery的实现原理的模拟代码 -3 事件处理
2010/08/03 Javascript
jquery miniui 教程 表格控件 合并单元格应用
2012/11/25 Javascript
用JavaScript实现对话框的教程
2015/06/04 Javascript
JavaScript类型系统之正则表达式
2016/01/05 Javascript
深入解析Backbone.js框架的依赖库Underscore.js的作用
2016/05/07 Javascript
教你JS中的运算符乘方、开方及变量格式转换
2016/08/09 Javascript
浅谈JS的基础类型与引用类型
2016/09/13 Javascript
angular-ui-sortable实现可拖拽排序列表
2016/12/28 Javascript
AngularJS表单提交实例详解
2017/02/18 Javascript
Vue计算属性的学习笔记
2017/03/22 Javascript
VueJs组件之父子通讯的方式
2018/05/06 Javascript
Vue.js的复用组件开发流程完整记录
2018/11/29 Javascript
VUE的history模式下除了index外其他路由404报错解决办法
2019/08/21 Javascript
JS中自定义事件的使用与触发操作实例分析
2019/11/01 Javascript
JavaScript进阶(四)原型与原型链用法实例分析
2020/05/09 Javascript
python中查找excel某一列的重复数据 剔除之后打印
2013/02/10 Python
python使用BeautifulSoup分页网页中超链接的方法
2015/04/04 Python
Python中列表元素转为数字的方法分析
2016/06/14 Python
深入浅析Python中join 和 split详解(推荐)
2016/06/30 Python
python执行使用shell命令方法分享
2017/11/08 Python
python os.path.isfile 的使用误区详解
2019/11/29 Python
安装PyInstaller失败问题解决
2019/12/14 Python
pytorch 归一化与反归一化实例
2019/12/31 Python
HTML5 canvas基本绘图之绘制五角星
2016/06/27 HTML / CSS
全球独特生活方式产品和礼品购物网站:AHAlife
2018/09/18 全球购物
豪华床上用品 :Jennifer Adams
2019/09/15 全球购物
士力架广告词
2014/03/20 职场文书
特教教师先进事迹
2014/05/21 职场文书
中学生旷课检讨书模板
2014/10/08 职场文书
告知书格式
2015/07/01 职场文书
为什么说餐饮很难做,是因为你不了解这些新规则
2019/08/20 职场文书
八年级作文之我的母亲
2019/12/10 职场文书