基于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 相关文章推荐
javascript 仿QQ滑动菜单效果代码
Sep 03 Javascript
百度地图api应用标注地理位置信息(js版)
Feb 01 Javascript
js监听滚动条滚动事件使得某个标签内容始终位于同一位置
Jan 24 Javascript
jQuery使用drag效果实现自由拖拽div
Jun 11 Javascript
JS实现仿Windows经典风格的选项卡Tab切换代码
Oct 20 Javascript
jquery.cookie实现的客户端购物车操作实例
Dec 24 Javascript
jQuery通用的全局遍历方法$.each()用法实例
Jul 04 Javascript
JS基于递归算法实现1,2,3,4,5,6,7,8,9倒序放入数组中的方法
Jan 03 Javascript
Vue 父子组件、组件间通信
Mar 08 Javascript
es6 字符串String的扩展(实例讲解)
Aug 03 Javascript
react路由配置方式详解
Aug 07 Javascript
Node.js API详解之 repl模块用法实例分析
May 25 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
随机广告显示(PHP函数)
2006/10/09 PHP
php实现zip压缩文件解压缩代码分享(简单易懂)
2014/05/10 PHP
实例讲解如何在PHP的Yii框架中进行错误和异常处理
2016/03/17 PHP
YII动态模型(动态表名)支持分析
2016/03/29 PHP
javascript 事件处理程序介绍
2012/06/27 Javascript
jquery 实现表单验证功能代码(简洁)
2012/07/03 Javascript
jquery 元素控制(追加元素/追加内容)介绍及应用
2013/04/21 Javascript
JS与C#编码解码
2013/12/03 Javascript
JavaScript DSL 流畅接口(使用链式调用)实例
2015/03/15 Javascript
向JavaScript的数组中添加元素的方法小结
2015/10/24 Javascript
jQuery表格插件datatables用法汇总
2016/03/29 Javascript
JS实现的多张图片轮流播放幻灯片效果
2016/07/22 Javascript
vue如何引用其他组件(css和js)
2017/04/13 Javascript
用node.js写一个jenkins发版脚本
2019/05/21 Javascript
vue实现文字加密功能
2019/09/27 Javascript
前端开发之便利店收银系统代码
2019/12/27 Javascript
JavaScript 引用类型实例详解【数组、对象、严格模式等】
2020/05/13 Javascript
js前端对于大量数据的展示方式及处理方法
2020/12/02 Javascript
Python 实现12306登录功能实例代码
2018/02/09 Python
python使用wxpy轻松实现微信防撤回的方法
2019/02/21 Python
python实现井字棋小游戏
2020/03/04 Python
python 穷举指定长度的密码例子
2020/04/02 Python
python 5个顶级异步框架推荐
2020/09/09 Python
Python tempfile模块生成临时文件和临时目录
2020/09/30 Python
使用Python通过oBIX协议访问Niagara数据的示例
2020/12/04 Python
HTML5移动端手机网站开发流程
2016/04/25 HTML / CSS
世界上最受欢迎的钓鱼诱饵:Rapala
2019/05/02 全球购物
我的applet原先好好的, 一放到web server就会有问题,为什么?
2016/05/10 面试题
火山动力Java笔试题
2014/06/26 面试题
社区八一活动方案
2014/02/03 职场文书
安全生产责任书
2014/03/12 职场文书
初三班主任寄语大全
2014/04/04 职场文书
签订劳动合同通知书
2015/04/16 职场文书
责任书范本大全
2015/05/11 职场文书
PHP中多字节字符串操作实例详解
2021/08/23 PHP
mysql中关键词exists的用法实例详解
2022/06/10 MySQL