基于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 Validation实例代码 让验证变得如此容易
Oct 18 Javascript
Js日期选择器并自动加入到输入框中示例代码
Aug 02 Javascript
JavaScript中的常见问题解决方法(乱码,IE缓存,代理)
Nov 28 Javascript
JavaScript面对国际化编程时的一些建议
Jun 24 Javascript
浅析JavaScript访问对象属性和方法及区别
Nov 16 Javascript
jQuery使用模式窗口实现在主页面和子页面中互相传值的方法
Mar 01 Javascript
AngularJS实用开发技巧(推荐)
Jul 13 Javascript
javascript弹出带文字信息的提示框效果
Jul 19 Javascript
深入理解React中es6创建组件this的方法
Aug 29 Javascript
探讨Vue.js的组件和模板
Oct 27 Javascript
修改NPM全局模式的默认安装路径的方法
Dec 15 Javascript
vue实现在data里引入相对路径
Jun 05 Vue.js
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执行速率优化技巧小结
2008/03/15 PHP
Windows下利用Gvim写PHP产生中文乱码问题解决方法
2011/04/20 PHP
php显示时间常用方法小结
2015/06/05 PHP
php图像验证码生成代码
2017/06/08 PHP
JS实现金额转换(将输入的阿拉伯数字)转换成中文的实现代码
2013/09/30 Javascript
浏览器的JavaScript引擎的识别方法
2013/10/20 Javascript
Javascript:为input设置readOnly属性(示例讲解)
2013/12/25 Javascript
JQuery插件iScroll实现下拉刷新,滚动翻页特效
2014/06/22 Javascript
Jquery响应回车键直接提交表单操作代码
2014/07/25 Javascript
javascript瀑布流式图片懒加载实例解析与优化
2016/02/23 Javascript
快速获取/设置iframe内对象元素的几种js实现方法
2016/05/20 Javascript
RequireJS多页面应用实例分析
2016/06/29 Javascript
javascript 闭包详解及简单实例应用
2016/12/31 Javascript
JavaScript中创建对象的7种模式详解
2017/02/21 Javascript
JavaScript实现前端实时搜索功能
2020/03/26 Javascript
利用node.js实现反向代理的方法详解
2017/07/24 Javascript
react-native ListView下拉刷新上拉加载实现代码
2017/08/03 Javascript
jQuery实现提交表单时不提交隐藏div中input的方法
2019/10/08 jQuery
Vue 通过公共字段,拼接两个对象数组的实例
2019/11/07 Javascript
在Python中操作字符串之replace()方法的使用
2015/05/19 Python
Python爬取当当、京东、亚马逊图书信息代码实例
2017/12/09 Python
浅析PHP与Python进行数据交互
2018/05/15 Python
celery4+django2定时任务的实现代码
2018/12/23 Python
Python3使用Matplotlib 绘制精美的数学函数图形
2019/04/11 Python
python函数enumerate,operator和Counter使用技巧实例小结
2020/02/22 Python
Django自定义全局403、404、500错误页面的示例代码
2020/03/08 Python
深入浅析Python代码规范性检测
2020/07/31 Python
纯CSS3实现的井字棋游戏
2020/11/25 HTML / CSS
与世界上最好的跑步专业品牌合作:Fleet Feet
2019/03/22 全球购物
端午节粽子促销活动方案
2014/02/02 职场文书
元旦文艺汇演主持词
2014/03/26 职场文书
年度安全生产目标责任书
2014/07/23 职场文书
庭外和解协议书
2016/03/23 职场文书
用Python可视化新冠疫情数据
2022/01/18 Python
2022漫威和DC电影上映作品
2022/04/05 欧美动漫
详解Spring Security如何在权限中使用通配符
2022/06/28 Java/Android