基于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 相关文章推荐
TBCompressor js代码压缩
Jan 05 Javascript
引用外部js乱码问题分析及解决方案
Apr 12 Javascript
JavaScript学习心得之概述
Jan 20 Javascript
JavaScript中模拟实现jsonp
Jun 19 Javascript
JQuery实现左右滚动菜单特效
Sep 28 Javascript
浅析2种JavaScript继承方式
Dec 04 Javascript
js实现文字超出部分用省略号代替实例代码
Sep 01 Javascript
分享一个原生的JavaScript拖动方法
Sep 25 Javascript
Javascript农历与公历相互转换的简单实例
Oct 09 Javascript
前端框架学习总结之Angular、React与Vue的比较详解
Mar 14 Javascript
angular动态表单制作
Feb 23 Javascript
JS使用Prim算法和Kruskal算法实现最小生成树
Jan 17 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引用传值实例详解学习
2013/11/06 PHP
PHP生成数组再传给js的方法
2014/08/07 PHP
PHP+jQuery 注册模块的改进(三):更新到Smarty3.1
2014/10/14 PHP
ioncube_loader_win_5.2.dll的错误解决方法
2015/01/04 PHP
基于jquery的实现简单的表格中增加或删除下一行
2010/08/01 Javascript
ie下动态加态js文件的方法
2011/09/13 Javascript
jquery 循环显示div的示例代码
2013/10/18 Javascript
setinterval()与clearInterval()JS函数的调用方法
2015/01/21 Javascript
JavaScript使用concat连接数组的方法
2015/04/06 Javascript
使用React实现轮播效果组件示例代码
2016/09/05 Javascript
微信小程序 radio单选框组件详解及实例代码
2017/01/10 Javascript
angular2中router路由跳转navigate的使用与刷新页面问题详解
2017/05/07 Javascript
详解node.js中的npm和webpack配置方法
2018/01/21 Javascript
JavaScript代码实现txt文件的上传预览功能
2018/03/27 Javascript
浅谈js中的bind
2019/03/18 Javascript
Python2.x版本中maketrans()方法的使用介绍
2015/05/19 Python
python实现的简单抽奖系统实例
2015/05/22 Python
详解Django中的ifequal和ifnotequal标签使用
2015/07/16 Python
使用Kivy将python程序打包为apk文件
2017/07/29 Python
python3结合openpyxl库实现excel操作的实例代码
2018/09/11 Python
python求解数组中两个字符串的最小距离
2018/09/27 Python
Python3.5常见内置方法参数用法实例详解
2019/04/29 Python
Python3.5以上版本lxml导入etree报错的解决方案
2019/06/26 Python
Django框架 querySet功能解析
2019/09/04 Python
在Python中使用turtle绘制多个同心圆示例
2019/11/23 Python
pytorch实现线性拟合方式
2020/01/15 Python
Python3运算符常见用法分析
2020/02/14 Python
vue.js刷新当前页面的实例讲解
2020/12/29 Python
python工具——Mimesis的简单使用教程
2021/01/16 Python
HTML5+CSS3实现机器猫
2016/10/17 HTML / CSS
详解移动端html5页面长按实现高亮全选文本内容的兼容解决方案
2016/12/03 HTML / CSS
小学生自我评价范文
2014/01/25 职场文书
十佳中学生事迹材料
2014/06/02 职场文书
群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
检举信的写法
2019/04/10 职场文书
sql server 累计求和实现代码
2022/02/28 SQL Server