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 相关文章推荐
HTML-CSS群中单选引发的“事件”
Mar 05 Javascript
JS可以控制样式的名称写法一览
Jan 16 Javascript
jQuery 实现自动填充邮箱功能(带下拉提示)
Oct 14 Javascript
JavaScript中的全局对象介绍
Jan 01 Javascript
AngularJS中的过滤器使用详解
Jun 16 Javascript
有关JavaScript中call()和apply() 的一些理解
May 20 Javascript
js实现图片缓慢放大缩小效果
Aug 02 Javascript
Javascript继承机制详解
May 30 Javascript
详解webpack-dev-server使用http-proxy解决跨域问题
Jan 13 Javascript
ES6 Map结构的应用实例分析
Jun 26 Javascript
vue实现数字动态翻牌的效果(开箱即用)
Dec 08 Javascript
vue+高德地图实现地图搜索及点击定位操作
Sep 09 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脚本的10个技巧(3)
2006/10/09 PHP
JavaScript学习笔记之获取当前目录的实现代码
2010/12/14 Javascript
最丑的时钟效果!js canvas时钟制作方法
2016/08/15 Javascript
jQuery基于Ajax方式提交表单功能示例
2017/02/10 Javascript
bootstrap Table的一些小操作
2017/11/01 Javascript
vue的全局提示框组件实例代码
2018/02/26 Javascript
JS+HTML5 Canvas实现简单的写字板功能示例
2018/08/30 Javascript
解决angular2 获取到的数据无法实时更新的问题
2018/08/31 Javascript
vue实现自定义日期组件功能的实例代码
2018/11/06 Javascript
Vue项目中使用flow做类型检测的方法
2020/03/18 Javascript
python海龟绘图实例教程
2014/07/24 Python
python解决汉字编码问题:Unicode Decode Error
2017/01/19 Python
python3中set(集合)的语法总结分享
2017/03/24 Python
Django教程笔记之中间件middleware详解
2018/08/01 Python
python针对不定分隔符切割提取字符串的方法
2018/10/26 Python
PyQt弹出式对话框的常用方法及标准按钮类型
2019/02/27 Python
对django的User模型和四种扩展/重写方法小结
2019/08/17 Python
pytorch实现用Resnet提取特征并保存为txt文件的方法
2019/08/20 Python
python并发编程多进程 互斥锁原理解析
2019/08/20 Python
Python交互环境下打印和输入函数的实例内容
2020/02/16 Python
Python3 用什么IDE开发工具比较好
2020/11/28 Python
python中if嵌套命令实例讲解
2021/02/25 Python
css3闪亮进度条效果实现思路及代码
2013/04/17 HTML / CSS
澳大利亚领先的在线机械五金、园艺和存储专家:Edisons
2018/03/24 全球购物
菲律宾票务网站:StubHub菲律宾
2018/04/21 全球购物
香蕉共和国工厂店:Banana Republic Factory
2018/06/09 全球购物
鉴定评语大全
2014/05/05 职场文书
天地会口号
2014/06/17 职场文书
环境科学专业教师求职信
2014/07/12 职场文书
没有孩子的离婚协议书怎么写
2014/09/17 职场文书
2019年让高校“心动”的自荐信
2019/03/25 职场文书
对PyTorch中inplace字段的全面理解
2021/05/22 Python
Java框架入门之简单介绍SpringBoot框架
2021/06/18 Java/Android
react 路由Link配置详解
2021/11/11 Javascript
解决IDEA翻译插件Translation报错更新TTK失败不能使用
2022/04/24 Python
Apache SkyWalking 监控 MySQL Server 实战解析
2022/09/23 Servers