基于canvas实现的钟摆效果完整实例


Posted in Javascript onJanuary 26, 2016

本文实例讲述了基于canvas实现的钟摆效果。分享给大家供大家参考,具体如下:

运行效果截图如下:

基于canvas实现的钟摆效果完整实例

具体代码如下:

<!DOCTYPE html>
<html>
 <head>
  <title>demo</title>
  <style type="text/css">
   body {
    margin:0; padding:0;
   }
   #canvas {
    border:2px solid gray; box-shadow:0px 0px 2px 2px #494949;
   }
  </style>
 </head>
 <body>
  <canvas id="canvas" width="500px" height="500px"></canvas>
  <script type="text/javascript">
   var canvas = document.getElementById("canvas");
   var ctx = canvas.getContext("2d");
   var r = 250;
   var colorList = "abcdefABCDEF0123456789".split("");
   var colorListLength = colorList.length;
   var color = function() {
    var _color = "#";
    for(var i=0; i<6; i++) {
     _color += colorList[Math.round(Math.random()*colorListLength)];
    }
    return _color;
   };
   var createArc = function(attrs) {
    ctx.save();
    ctx.beginPath();
    ctx.fillStyle = attrs.color || color();
    ctx.arc(attrs.x, attrs.y, attrs.r, 0, Math.PI*2);
    ctx.closePath();
    ctx.fill();
    ctx.restore();
   };
   var createLine = function(from, to) {
    ctx.save();
    ctx.beginPath();
    ctx.moveTo(from.x, from.y);
    ctx.lineTo(to.x, to.y);
    ctx.stroke();
    ctx.closePath();
    ctx.restore();
   }
   var createAll = function(to) {
    createArc({x: 250, y: 0, r: 10, color: "black"});
    createArc({x: to.x, y: to.y, r: 20, color: "black"});
    createLine({x: 250, y: 0}, {x: to.x, y: to.y});
   };
   var minAngle = 0;
   var maxAngle = Math.PI;
   var addAngle = Math.PI/24;
   var angle = minAngle;
   var mode = "left";
   var interval = setInterval(function() {
    var y = Math.sin(angle)*r+200;
    var x = Math.cos(angle)*r+250;
    switch(mode) {
     case "left":
      ctx.clearRect(0, 0, 500, 500);
      createAll({x: x, y: y});
      angle += addAngle;
      if(angle > maxAngle) {
       mode = "right";
       angle -= addAngle;
       return;
      }
      break;
     case "right":
      ctx.clearRect(0, 0, 500, 500);
      createAll({x: x, y: y});
      angle -= addAngle;
      if(angle < minAngle) {
       mode = "default";
       angle += addAngle;
       return;
      }
      break;
     case "default":
      createAll({x: x, y: y});
      angle += addAngle;
      if(angle > maxAngle) {
       mode = "left";
       angle = minAngle;
       return;
      }
      break;
    }
   }, 50);
  </script>
 </body>
</html>

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
动态加载iframe
Jun 16 Javascript
js 弹出菜单/窗口效果
Oct 30 Javascript
JavaScript高级程序设计(第3版)学习笔记13 ECMAScript5新特性
Oct 11 Javascript
原创jQuery弹出层插件分享
Apr 02 Javascript
JS插件plupload.js实现多图上传并显示进度条
Nov 29 Javascript
详解微信小程序入门五: wxml文件引用、模版、生命周期
Jan 20 Javascript
详解Vue中状态管理Vuex
May 11 Javascript
js插件实现图片滑动验证码
Sep 29 Javascript
jsonp格式前端发送和后台接受写法的代码详解
Nov 07 Javascript
微信小程序整个页面的自动适应布局的实现
Jul 12 Javascript
javascript实现简易计算器功能
Sep 23 Javascript
JS+CSS实现过渡特效
Jan 02 Javascript
js实现的页面矩阵图形变换特效
Jan 26 #Javascript
JS实现简单的二维矩阵乘积运算
Jan 26 #Javascript
探究Javascript模板引擎mustache.js使用方法
Jan 26 #Javascript
jQuery Validation Plugin验证插件手动验证
Jan 26 #Javascript
一篇文章掌握RequireJS常用知识
Jan 26 #Javascript
JS正则表达式比较常见用法
Jan 26 #Javascript
WebGL利用FBO完成立方体贴图效果完整实例(附demo源码下载)
Jan 26 #Javascript
You might like
ThinkPHP设置禁止百度等搜索引擎转码(简单实用)
2016/02/15 PHP
php opendir()列出目录下所有文件的实例代码
2016/10/02 PHP
PHP实现的多维数组排序算法分析
2018/02/10 PHP
php原生数据库分页的代码实例
2019/02/18 PHP
PHP时间函数使用详解
2019/03/21 PHP
laravel Model 执行事务的实现
2019/10/10 PHP
JavaScript也谈内存优化
2014/06/06 Javascript
js代码实现的加入收藏效果并兼容主流浏览器
2014/06/23 Javascript
JQuery中$(document)是什么意思有什么作用
2014/07/21 Javascript
JavaScript设计模式学习之“类式继承”
2015/03/12 Javascript
jquery简单插件制作(fn.extend)完整实例
2016/05/24 Javascript
js无法获取到html标签的属性的解决方法
2016/07/26 Javascript
Angularjs中使用layDate日期控件示例
2017/01/11 Javascript
Auto.js自动收取自己和好友蚂蚁森林能量脚本
2018/06/28 Javascript
快速解决vue在ios端下点击响应延时的问题
2018/08/27 Javascript
vue解决使用webpack打包后keep-alive不生效的方法
2018/09/01 Javascript
react native 原生模块桥接的简单说明小结
2019/02/26 Javascript
探究一道价值25k的蚂蚁金服异步串行面试题
2020/08/21 Javascript
使用原生javascript开发计算器实例代码
2021/02/21 Javascript
Ubuntu下使用python读取doc和docx文档的内容方法
2018/05/08 Python
python 监听salt job状态,并任务数据推送到redis中的方法
2019/01/14 Python
Python3模拟curl发送post请求操作示例
2019/05/03 Python
详解python的变量缓存机制
2021/01/24 Python
css3实现3D色子翻转特效
2014/12/23 HTML / CSS
简单介绍CSS3中Media Query的使用
2015/07/07 HTML / CSS
深深扎根运动世界的生活品牌:Tillys
2017/10/30 全球购物
通用自荐信范文
2014/03/14 职场文书
倡议书格式范文
2014/04/14 职场文书
教师求职信范文
2014/05/24 职场文书
2014四风问题对照检查材料范文
2014/09/15 职场文书
2014年重阳节老干部座谈会上的讲话稿
2014/09/25 职场文书
大学生上课迟到检讨书
2014/10/15 职场文书
小学三年级班主任工作经验交流材料
2015/11/02 职场文书
python入门学习关于for else的特殊特性讲解
2021/11/20 Python
详解SQL报错盲注
2022/07/23 SQL Server
Java Spring读取和存储详细操作
2022/08/05 Java/Android