基于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 相关文章推荐
jquery实现按Enter键触发事件示例
Sep 10 Javascript
XMLHttpRequest处理xml格式的返回数据(示例代码)
Nov 21 Javascript
node.js中的fs.fstatSync方法使用说明
Dec 15 Javascript
简介JavaScript中的unshift()方法的使用
Jun 09 Javascript
jQuery轮播图效果精简版完整示例
Sep 04 Javascript
深入研究jQuery图片懒加载 lazyload.js使用方法
Aug 16 jQuery
python爬取安居客二手房网站数据(实例讲解)
Oct 19 Javascript
在vue-cli中组件通信的方法
Dec 16 Javascript
移动web开发之touch事件实例详解
Jan 17 Javascript
微信小程序开发实现的IP地址查询功能示例
Mar 28 Javascript
JavaScript观察者模式原理与用法实例详解
Mar 10 Javascript
单线程JavaScript实现异步过程详解
May 19 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
javascript firefox不显示本地预览图片问题的解决方法
2008/11/12 Javascript
JS正则表达式获取分组内容的方法详解
2013/11/15 Javascript
优化javascript的执行效率一些方法总结
2013/12/25 Javascript
为指定的元素添加遮罩层的示例代码
2014/01/15 Javascript
用Jquery选择器计算table中的某一列某一行的合计
2014/08/13 Javascript
Js制作点击输入框时默认文字消失的效果
2015/09/05 Javascript
jQuery插件Easyui设置datagrid的pageNumber导致两次请求问题的解决方法
2016/08/06 Javascript
js上下视差滚动简单实现代码
2017/03/07 Javascript
JS兼容所有浏览器的DOMContentLoaded事件
2018/01/12 Javascript
layui form表单提交之后重新加载数据表格的方法
2019/09/11 Javascript
JS数组方法push()、pop()用法实例分析
2020/01/18 Javascript
Vue组件模板及组件互相引用代码实例
2020/03/11 Javascript
[03:07]2015国际邀请赛选手档案EHOME.rOtK 是什么让他落泪?
2015/07/31 DOTA
[41:37]DOTA2北京网鱼队选拔赛——冲击职业之路
2015/04/13 DOTA
python3模拟百度登录并实现百度贴吧签到示例分享(百度贴吧自动签到)
2014/02/24 Python
python基础教程之分支、循环简单用法
2016/06/16 Python
pygame游戏之旅 python和pygame安装教程
2018/11/20 Python
django基于restframework的CBV封装详解
2019/08/08 Python
windows10在visual studio2019下配置使用openCV4.3.0
2020/07/14 Python
12个不为大家熟知的HTML5设计小技巧
2016/06/02 HTML / CSS
澳大利亚家具和家居用品在线:BROSA
2017/11/02 全球购物
京东国际站:JOYBUY
2017/11/23 全球购物
欧舒丹美国官网:L’Occitane美国
2018/02/23 全球购物
中国一家专注拼团的社交购物网站:拼多多
2018/06/13 全球购物
外贸采购员求职的自我评价
2013/11/26 职场文书
高中生毕业自我鉴定范文
2013/12/22 职场文书
军人违纪检讨书
2014/02/04 职场文书
装饰活动策划方案
2014/02/11 职场文书
怎么写好自荐书
2014/03/02 职场文书
四风批评与自我批评范文
2014/10/14 职场文书
2014年店长工作总结
2014/11/17 职场文书
学生考试舞弊检讨书
2015/01/01 职场文书
雷峰塔导游词
2015/02/09 职场文书
pandas提升计算效率的一些方法汇总
2021/05/30 Python
css3中2D转换之有趣的transform形变效果
2022/02/24 HTML / CSS
KVM基础命令详解
2022/04/30 Servers