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 相关文章推荐
Javascript 学习书 推荐
Jun 13 Javascript
javascript获得CheckBoxList选中的数量
Oct 27 Javascript
window.location.hash 属性使用说明
Mar 20 Javascript
JavaScript闭包 懂不懂由你反正我是懂了
Oct 21 Javascript
js控制table合并具体实现
Feb 20 Javascript
JsRender实用入门教程
Oct 31 Javascript
jQuery form插件之formDdata参数校验表单及验证后提交
Jan 23 Javascript
简单实现Bootstrap标签页
Aug 09 Javascript
vue几个常用跨域处理方式介绍
Feb 07 Javascript
使用node.JS中的url模块解析URL信息
Feb 06 Javascript
vue中watch的用法汇总
Dec 28 Vue.js
使用Ajax实现无刷新上传文件
Apr 12 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
《Pokemon Sword·Shield》系列WEB动画《薄明之翼》第2话声优阵容公开!
2020/03/06 日漫
在PHP中实现Javascript的escape()函数代码
2010/08/08 PHP
php foreach正序倒序输出示例代码
2014/07/01 PHP
适用于初学者的简易PHP文件上传类
2015/10/29 PHP
Javascript 对象的解释
2008/11/24 Javascript
用jQuery与JSONP轻松解决跨域访问的问题
2014/02/04 Javascript
javascript 3d 逐侦产品展示(核心精简)
2014/03/26 Javascript
jQuery Ajax中的事件详细介绍
2015/04/16 Javascript
js简单实现竖向tab选项卡的方法
2015/05/04 Javascript
基于html5和nodejs相结合实现websocket即使通讯
2015/11/19 NodeJs
vue组件如何被其他项目引用
2017/04/13 Javascript
详解AngularJS1.6版本中ui-router路由中/#!/的解决方法
2017/05/22 Javascript
基于Cookie常用操作以及属性介绍
2017/09/07 Javascript
小程序实现单选多选功能
2018/11/04 Javascript
jQuery使用$.extend(true,object1, object2);实现深拷贝对象的方法分析
2019/03/06 jQuery
详解在React-Native中持久化redux数据
2019/05/22 Javascript
uni-app 组件里面获取元素宽高的实现
2019/12/27 Javascript
微信小程序服务器日期格式化问题
2020/01/07 Javascript
Vue项目结合Vue-layer实现弹框式编辑功能(实例代码)
2020/03/11 Javascript
vue-cli3配置favicon.ico和title的流程
2020/10/27 Javascript
Python实现身份证号码解析
2015/09/01 Python
python多进程共享变量
2016/04/06 Python
Python使用Matplotlib模块时坐标轴标题中文及各种特殊符号显示方法
2018/05/04 Python
在双python下设置python3为默认的方法
2018/10/31 Python
Python填充任意颜色,不同算法时间差异分析说明
2020/05/16 Python
利用Python发送邮件或发带附件的邮件
2020/11/12 Python
Snapfish爱尔兰:在线照片打印和个性化照片礼品
2018/09/17 全球购物
杰夫·班克斯男士服装网上商店:Jeff Banks
2019/10/24 全球购物
《小白兔和小灰兔》教学反思
2014/02/18 职场文书
一年级班主任感言
2014/03/08 职场文书
好的促销活动方案
2014/08/21 职场文书
党员十八大心得体会
2014/09/12 职场文书
中层干部考核评语
2015/01/04 职场文书
Django实现在线无水印抖音视频下载(附源码及地址)
2021/05/06 Python
Python+tkinter实现高清图片保存
2022/03/13 Python
Java 超详细讲解设计模式之中的抽象工厂模式
2022/03/25 Java/Android