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 相关文章推荐
如何用js控制css中的float的代码
Aug 16 Javascript
JavaScript实现动态增加文件域表单
Feb 12 Javascript
jQuery的:parent选择器定义和用法
Jul 01 Javascript
JavaScript中使用Callback控制流程介绍
Mar 16 Javascript
javascript字符串循环匹配实例分析
Jul 17 Javascript
Babel 入门教程学习笔记
Jun 13 Javascript
浅谈vue项目4rs vue-router上线后history模式遇到的坑
Sep 27 Javascript
在React中写一个Animation组件为组件进入和离开加上动画/过度效果
Jun 24 Javascript
JS开发常用工具函数(小结)
Jul 04 Javascript
vue实现图片预览组件封装与使用
Jul 13 Javascript
Element-UI中关于table表格的那些骚操作(小结)
Aug 15 Javascript
Nuxt.js实现一个SSR的前端博客的示例代码
Sep 06 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
《雄兵连》系列首部大电影《烈阳天道》:可能是因为期望值太高了
2020/08/18 国漫
PHP语法自动检查的Vim插件
2014/08/11 PHP
php实现的IMEI限制的短信验证码发送类
2015/05/05 PHP
WordPress中访客登陆实现邮件提醒的PHP脚本实例分享
2015/12/14 PHP
Yii2框架中使用PHPExcel导出Excel文件的示例
2017/08/09 PHP
PHP连接sftp并下载文件的方法教程
2018/08/26 PHP
层序遍历在ExtJs的TreePanel中的应用
2009/10/16 Javascript
js 鼠标移动显示图片的简单实例
2013/12/25 Javascript
jQuery 获取/设置/删除DOM元素的属性以a元素为例
2014/05/23 Javascript
改变checkbox默认选中状态及取值的实现代码
2016/05/26 Javascript
jqGrid用法汇总(全经典)
2016/06/28 Javascript
使用jquery的jsonp如何发起跨域请求及其原理详解
2017/08/17 jQuery
利用canvas中toDataURL()将图片转为dataURL(base64)的方法详解
2017/11/20 Javascript
使用vue-cli+webpack搭建vue开发环境的方法
2017/12/22 Javascript
nginx部署访问vue-cli搭建的项目的方法
2018/02/12 Javascript
vue实现简单加法计算器
2020/10/22 Javascript
Python open()文件处理使用介绍
2014/11/30 Python
Python下载懒人图库JavaScript特效
2015/05/28 Python
python3+dlib实现人脸识别和情绪分析
2018/04/21 Python
Python爬虫爬取新浪微博内容示例【基于代理IP】
2018/08/03 Python
在python中以相同顺序shuffle两个list的方法
2018/12/13 Python
Python通过cv2读取多个USB摄像头
2019/08/28 Python
Python序列化与反序列化pickle用法实例
2019/11/11 Python
python GUI库图形界面开发之PyQt5线程类QThread详细使用方法
2020/02/26 Python
Python几种常见算法汇总
2020/06/02 Python
Python基于pandas绘制散点图矩阵代码实例
2020/06/04 Python
css3 按钮样式简单可扩展创建
2013/03/18 HTML / CSS
CHARLES & KEITH澳大利亚官网:新加坡时尚品牌
2019/01/22 全球购物
Delphi工程师笔试题
2013/09/21 面试题
艺术爱好者的自我评价分享
2013/10/08 职场文书
医学院毕业生自荐信范文
2014/03/06 职场文书
党员个人对照检查材料
2014/10/01 职场文书
致百米运动员广播稿5篇
2014/10/13 职场文书
2015新年寄语(一句话)
2014/12/08 职场文书
青年干部培训班学习心得体会
2016/01/06 职场文书
Nginx反向代理配置的全过程记录
2021/06/22 Servers