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 API学Jquery之一 选择器
Apr 07 Javascript
Javascript Throttle &amp; Debounce应用介绍
Mar 19 Javascript
Javascript图片上传前的本地预览实例
Jun 16 Javascript
Javascript实现div层渐隐效果的方法
May 30 Javascript
基于javascript实现按圆形排列DIV元素(一)
Dec 02 Javascript
基于JavaScript实现屏幕滚动效果
Jan 18 Javascript
SpringMVC简单整合Angular2的示例
Jul 31 Javascript
vue 组件使用中的一些细节点
Apr 25 Javascript
AngularJS实现与后台服务器进行交互的示例讲解
Aug 13 Javascript
js实现图片区域可点击大小随意改变(适用移动端)代码实例
Sep 11 Javascript
vue cli 3.0通用打包配置代码,不分一二级目录
Sep 02 Javascript
在js中修改html body的样式
Nov 11 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
日本十大最佳动漫,全都是二次元的神级作品
2019/10/05 日漫
在线竞拍系统的PHP实现框架(二)
2006/10/09 PHP
自编函数解决pathinfo()函数处理中文问题
2014/11/03 PHP
CI框架文件上传类及图像处理类用法分析
2016/05/18 PHP
PHP多进程编程总结(推荐)
2016/07/18 PHP
微信自定义分享php代码分析
2016/11/24 PHP
PHP实现文件上传功能实例代码
2017/05/18 PHP
PHP开发的微信现金红包功能示例
2017/06/29 PHP
ThinkPHP3.2.3框架实现执行原生SQL语句的方法示例
2019/04/03 PHP
Javascript里使用Dom操作Xml
2006/09/20 Javascript
JSON 编辑器实现代码
2009/12/06 Javascript
让IE8浏览器支持function.bind()方法
2014/10/16 Javascript
JavaScript高级教程5.6之基本包装类型(详细)
2015/11/23 Javascript
python爬取安居客二手房网站数据(实例讲解)
2017/10/19 Javascript
极简主义法编写JavaScript类
2017/11/02 Javascript
JS数组去重常用方法实例小结【4种方法】
2018/05/28 Javascript
vue配置font-awesome5的方法步骤
2019/01/27 Javascript
Servlet返回的数据js解析2种方法
2019/12/12 Javascript
Vue中使用Echarts仪表盘展示实时数据的实现
2020/11/01 Javascript
在Python中操作文件之seek()方法的使用教程
2015/05/24 Python
Pycharm 实现下一个文件引用另外一个文件的方法
2019/01/17 Python
利用CSS3实现单选框动画特效示例代码
2016/09/26 HTML / CSS
浅谈html5 video 移动端填坑记
2018/01/15 HTML / CSS
Snapfish英国:在线照片打印和个性化照片礼品
2017/01/13 全球购物
以太网Ethernet IEEE802.3
2013/08/05 面试题
医护人员英文求职信范文
2013/11/26 职场文书
快递业务员岗位职责
2014/01/06 职场文书
学生会主席就职演讲稿
2014/01/14 职场文书
销售员个人求职的自我评价
2014/02/10 职场文书
活动总结怎么写
2014/04/28 职场文书
多媒体教室标语
2014/06/26 职场文书
家装电话营销开场白
2015/05/29 职场文书
怎样写观后感
2015/06/19 职场文书
《分数的意义》教学反思
2016/02/20 职场文书
如何用RabbitMQ和Swoole实现一个异步任务系统
2021/05/29 PHP
《金肉人》米特&《航海王》阿鹤声优松岛实因胰脏癌去世 享寿81岁
2022/04/13 日漫