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的气泡提示效果
May 31 Javascript
基于jQuery实现的当离开页面时出现提示的实现代码
Jun 27 Javascript
ASP.NET jQuery 实例11 通过使用jQuery validation插件简单实现用户登录页面验证功能
Feb 03 Javascript
JS Map 和 List 的简单实现代码
Jul 08 Javascript
javascript操作html控件实例(javascript添加html)
Dec 02 Javascript
运用jQuery定时器的原理实现banner图片切换
Oct 22 Javascript
JS实现滑动菜单效果代码(包括Tab,选项卡,横向等效果)
Sep 24 Javascript
总结AngularJS开发者最常犯的十个错误
Aug 31 Javascript
jquery 一键复制到剪切板的实例
Sep 20 jQuery
webpack将js打包后的map文件详解
Feb 22 Javascript
详解搭建一个vue-cli的移动端H5开发模板
Jan 17 Javascript
node.js制作一个简单的登录拦截器
Feb 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
用文本作数据处理
2006/10/09 PHP
PHP Squid中可缓存的动态网页设计
2008/09/17 PHP
Laravel 4 初级教程之Pages、表单验证
2014/10/30 PHP
PHP中使用imagick实现把PDF转成图片
2015/01/26 PHP
PHP获取指定日期是星期几的实现方法
2016/11/30 PHP
php 与 nginx 的处理方式及nginx与php-fpm通信的两种方式
2018/09/28 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
2020/02/15 PHP
JavaScript入门教程(6) Window窗口对象
2009/01/31 Javascript
jquery简单瀑布流实现原理及ie8下测试代码
2013/01/23 Javascript
js局部刷新页面时间具体实现
2013/07/04 Javascript
javascript Array.prototype.slice的使用示例
2013/11/14 Javascript
javascript实现数字+字母验证码的简单实例
2014/02/10 Javascript
php析构函数的具体用法小结
2014/03/11 Javascript
JavaScript实现给按钮加上双重动作的方法
2015/08/14 Javascript
全面解析jQuery $(document).ready()和JavaScript onload事件
2016/06/08 Javascript
javascript实现随机生成DIV背景色
2016/06/20 Javascript
AngularJS基础 ng-include 指令示例讲解
2016/08/01 Javascript
JavaScript易错知识点整理
2016/12/05 Javascript
JS数组排序方法实例分析
2016/12/16 Javascript
如何使用less实现随机下雪动画详解
2019/01/02 Javascript
javascript移动端 电子书 翻页效果实现代码
2019/09/07 Javascript
React中使用UMEditor的方法示例
2019/12/27 Javascript
原生js滑动轮播封装
2020/07/31 Javascript
[02:46]2014DOTA2国际邀请赛 选手为你解读比赛MVP充满梦想
2014/07/09 DOTA
使用C++扩展Python的功能详解
2018/01/12 Python
Python cookbook(数据结构与算法)同时对数据做转换和换算处理操作示例
2018/03/23 Python
python实现在遍历列表时,直接对dict元素增加字段的方法
2019/01/15 Python
Python接口自动化判断元素原理解析
2020/02/24 Python
python GUI库图形界面开发之PyQt5中QWebEngineView内嵌网页与Python的数据交互传参详细方法实例
2020/02/26 Python
浅谈Python中的异常和JSON读写数据的实现
2020/02/27 Python
Python虚拟环境venv用法详解
2020/05/25 Python
python中字典增加和删除使用方法
2020/09/30 Python
html5文本内容_动力节点Java学院整理
2017/07/11 HTML / CSS
俄罗斯领先的移动和数字设备在线商店:Svyaznoy.ru
2020/12/21 全球购物
工程项目建议书范文
2014/03/12 职场文书
店长岗位职责
2015/02/11 职场文书