基于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 基础问答三
Dec 03 Javascript
JS弹出对话框返回值代码(asp.net后台)
Dec 28 Javascript
JavaScript中的this关键字介绍与使用实例
Jun 21 Javascript
jQuery实现contains方法不区分大小写的方法
Feb 13 Javascript
为什么JS中eval处理JSON数据要加括号
Apr 13 Javascript
jQuery实现文件上传进度条特效
Aug 12 Javascript
简单谈谈Javascript函数中的arguments
Feb 09 Javascript
js/jq仿window文件夹框选操作插件
Mar 08 Javascript
微信小程序实现倒计时补零功能
Jul 09 Javascript
在vue-cli 3中给stylus、sass样式传入共享的全局变量
Aug 12 Javascript
vue中获取滚动table的可视页面宽度调整表头与列对齐(每列宽度不都相同)
Aug 17 Javascript
vue使用refs获取嵌套组件中的值过程
Mar 31 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 tp验证表单与自动填充函数代码
2012/02/22 PHP
php+mysql实现数据库随机重排实例
2014/10/17 PHP
PHP实现无限级分类(不使用递归)
2015/10/22 PHP
实例讲解yii2.0在php命令行中运行的步骤
2015/12/01 PHP
JavaScript 一行代码,轻松搞定浮动快捷留言-V2升级版
2010/04/02 Javascript
jquery刷新页面的实现代码(局部及全页面刷新)
2011/07/11 Javascript
浅谈Javascript事件模拟
2012/06/27 Javascript
javascript之典型高阶函数应用介绍二
2013/01/10 Javascript
jquery如何实现在加载完iframe的内容后再进行操作
2013/09/10 Javascript
jQuery简单实现QQ空间点赞已经取消点赞
2015/04/02 Javascript
基于jquery步骤进度条源码分享
2015/11/12 Javascript
jQuery+jsp下拉框联动获取本地数据的方法(附源码)
2015/12/03 Javascript
JavaScript中通过提示框跳转页面的方法
2016/02/14 Javascript
JavaScript实现汉字转换为拼音的库文件示例
2016/12/22 Javascript
Vue3.x源码调试的实现方法
2019/10/13 Javascript
使用axios请求时,发送formData请求的示例
2019/10/29 Javascript
vue使用nprogress加载路由进度条的方法
2020/06/04 Javascript
js实现金山打字通小游戏
2020/07/24 Javascript
彻底搞懂并解决vue-cli4中图片显示的问题实现
2020/08/31 Javascript
关于Vue中$refs的探索浅析
2020/11/05 Javascript
[04:04]显微镜下的DOTA2第六期——电影级别的华丽团战
2014/06/20 DOTA
[51:26]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第二局
2016/03/03 DOTA
Python对象类型及其运算方法(详解)
2017/07/05 Python
tensorflow 使用flags定义命令行参数的方法
2018/04/23 Python
Python面向对象程序设计之私有属性及私有方法示例
2019/04/08 Python
Pytorch 实现权重初始化
2019/12/31 Python
Django视图类型总结
2021/02/17 Python
电子信息毕业生自荐信
2013/11/16 职场文书
募捐倡议书
2014/04/14 职场文书
2014年减负工作总结
2014/12/10 职场文书
刑事附带民事起诉状
2015/05/19 职场文书
新闻报道稿范文
2015/07/23 职场文书
关于教师节的广播稿
2015/08/19 职场文书
2016年党员干部公开承诺书
2016/03/24 职场文书
Nginx 配置 HTTPS的详细过程
2022/05/30 Servers
修改Nginx配置返回指定content-type的方法
2022/09/23 Servers