基于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 相关文章推荐
extjs grid设置某列背景颜色和字体颜色的实现方法
Sep 06 Javascript
基于OO的动画附加插件,可以实现弹跳、渐隐等动画效果 分享
Jun 24 Javascript
javascript遇到html5的一些表单属性
Jul 05 Javascript
JS实现仿PS的调色板效果完整实例
Dec 21 Javascript
JS获取本周周一,周末及获取任意时间的周一周末功能示例
Feb 09 Javascript
令按钮悬浮在(手机)页面底部的实现方法
May 02 Javascript
解决OneThink中无法异步提交kindeditor文本框中修改后的内容方法
May 05 Javascript
如何在Vue.js中实现标签页组件详解
Jan 02 Javascript
使用原生js编写一个简单的框选功能方法
May 13 Javascript
详解mpvue中使用vant时需要注意的onChange事件的坑
May 16 Javascript
Vue组件模板的几种书写形式(3种)
Feb 19 Javascript
Vue router传递参数并解决刷新页面参数丢失问题
Dec 02 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
在laravel5.2中实现点击用户头像更改头像的方法
2019/10/14 PHP
php把文件设置为插件的技巧方法
2020/02/03 PHP
javascript 用记忆函数快速计算递归函数
2010/03/15 Javascript
JavaScript面向对象程序设计三 原型模式(上)
2011/12/21 Javascript
JavaScript高级程序设计(第3版)学习笔记2 js基础语法
2012/10/11 Javascript
js弹出窗口之弹出层的小例子
2013/06/17 Javascript
Js(JavaScript)中,弹出是或否的选择框示例(confirm用法的实例分析)
2013/07/09 Javascript
JS判断不能为空实例代码
2013/11/26 Javascript
JQUERY dialog的用法详细解析
2013/12/19 Javascript
超级简单的jquery操作表格方法
2014/12/15 Javascript
有关jquery与DOM节点操作方法和属性记录
2016/04/15 Javascript
BootStrap的alert提示框的关闭后再显示怎么解决
2016/05/17 Javascript
Backbone View 之间通信的三种方式
2016/08/09 Javascript
js 作用域和变量详解
2017/02/16 Javascript
Javascript中八种遍历方法的执行速度深度对比
2017/04/25 Javascript
python使用cookielib库示例分享
2014/03/03 Python
用python登录Dr.com思路以及代码分享
2014/06/25 Python
python基于xmlrpc实现二进制文件传输的方法
2015/06/02 Python
Python2.7基于淘宝接口获取IP地址所在地理位置的方法【测试可用】
2017/06/07 Python
浅谈Python批处理文件夹中的txt文件
2019/03/11 Python
python 实现的发送邮件模板【普通邮件、带附件、带图片邮件】
2019/07/06 Python
在python中画正态分布图像的实例
2019/07/08 Python
python opencv对图像进行旋转且不裁剪图片的实现方法
2019/07/09 Python
django删除表重建的实现方法
2019/08/28 Python
安装PyInstaller失败问题解决
2019/12/14 Python
怎么解决pycharm license Acti的方法
2020/10/28 Python
HTML5实现QQ聊天气泡效果
2017/06/26 HTML / CSS
中国排名第一的外贸销售网站:LightInTheBox.com(兰亭集势)
2016/10/28 全球购物
美国和加拿大房车出售在线分类广告:RVT.com
2018/04/23 全球购物
美国礼品卡交易网站:Cardpool
2018/08/27 全球购物
庆八一活动方案
2014/01/25 职场文书
六一儿童节演讲稿
2014/05/23 职场文书
会计系毕业生求职信
2014/05/28 职场文书
暑假社会实践证明格式
2014/10/28 职场文书
实习生辞职信范文
2015/03/02 职场文书
高一语文教学反思
2016/02/16 职场文书