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 相关文章推荐
5秒后跳转效果(setInterval/SetTimeOut)
May 03 Javascript
从数组中随机取x条不重复数据的JS代码
Dec 24 Javascript
Javasipt:操作radio标签详解
Dec 30 Javascript
让人蛋疼的JavaScript语法特性
Sep 30 Javascript
JS控制伪元素的方法汇总
Apr 06 Javascript
Three.js获取鼠标点击的三维坐标示例代码
Mar 24 Javascript
Easyui和zTree两种方式分别实现树形下拉框
Aug 04 Javascript
angularjs实现猜大小功能
Oct 23 Javascript
微信小程序入门之广告条实现方法示例
Dec 05 Javascript
vue实现百度下拉列表交互操作示例
Mar 12 Javascript
详解Vue+ElementUI从零开始搭建自己的网站(一、环境搭建)
Apr 30 Javascript
JS实现单张或多张图片持续无缝滚动的示例代码
May 10 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下的权限算法的实现
2007/04/28 PHP
PHP基础教程(php入门基础教程)一些code代码
2013/01/06 PHP
php 使用fopen函数创建、打开文件详解及实例代码
2016/09/24 PHP
找到一点可怜的关于dojo资料,谢谢作者!
2006/12/06 Javascript
Javascript----文件操作
2007/01/18 Javascript
js中根据字数截取字符串,不能截断url
2012/01/12 Javascript
如何用ajax来创建一个XMLHttpRequest对象
2012/12/10 Javascript
javascript定时变换图片实例代码
2013/03/17 Javascript
原生js实现半透明遮罩层效果具体代码
2013/06/06 Javascript
JavaScript实现算术平方根算法-代码超简单
2015/09/11 Javascript
Jquery-1.9.1源码分析系列(十一)之DOM操作
2015/11/25 Javascript
AngularJS基础 ng-srcset 指令简单示例
2016/08/03 Javascript
jQuery EasyUI tree 使用拖拽时遇到的错误小结
2016/10/10 Javascript
Vue.js学习之过滤器详解
2017/01/22 Javascript
Angular 项目实现国际化的方法
2018/01/08 Javascript
JS实现基于拖拽改变物体大小的方法
2018/01/23 Javascript
vue 项目中使用Loading组件的示例代码
2018/08/31 Javascript
javascript设计模式 ? 抽象工厂模式原理与应用实例分析
2020/04/09 Javascript
JavaScript面向对象核心知识与概念归纳整理
2020/05/09 Javascript
星球大战与Python之间的那些事
2016/01/07 Python
Python爬虫实现百度图片自动下载
2018/02/04 Python
Django框架文件上传与自定义图片上传路径、上传文件名操作分析
2019/05/10 Python
图文详解Django使用Pycharm连接MySQL数据库
2019/08/09 Python
多版本python的pip 升级后, pip2 pip3 与python版本失配解决方法
2019/09/11 Python
Python基于Tkinter编写crc校验工具
2020/05/06 Python
Selenium Webdriver元素定位的八种常用方式(小结)
2021/01/13 Python
美国花布包包品牌:Vera Bradley
2017/08/11 全球购物
Sandro Paris美国官网:典雅别致的法国时尚服饰品牌
2017/12/26 全球购物
旧时光糖果:Old Time Candy
2018/02/05 全球购物
英国领先的餐饮折扣俱乐部:Gourmet Society
2020/07/26 全球购物
常用UNIX 命令(Linux的常用命令)
2015/12/26 面试题
艾滋病宣传活动总结
2014/05/08 职场文书
副总经理岗位职责范本
2015/04/08 职场文书
毕业设计论文致谢词
2015/05/14 职场文书
归途列车观后感
2015/06/17 职场文书
python自动化八大定位元素讲解
2021/07/09 Python