基于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 中的事件教程
Apr 05 Javascript
javascript的offset、client、scroll使用方法详解
Dec 25 Javascript
JavaScript改变HTML元素的样式改变CSS及元素属性
Nov 12 Javascript
js之ActiveX控件使用说明 new ActiveXObject()
Mar 03 Javascript
javascript实现网页中涉及的简易运动(改变宽高、透明度、位置)
Nov 29 Javascript
理解javascript中DOM事件
Dec 25 Javascript
jquery中cookie用法实例详解(获取,存储,删除等)
Jan 04 Javascript
JS &amp; JQuery 动态添加 select option
Jun 08 Javascript
根据输入邮箱号跳转到相应登录地址的解决方法
Dec 13 Javascript
jQuery实现可拖拽3D万花筒旋转特效
Jan 03 Javascript
es6中比较有用的7个技巧小结
Jul 12 Javascript
7个你应该知道的JS原生错误类型
Apr 29 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程序中的常见漏洞进行攻击(下)
2006/10/09 PHP
Window下PHP三种运行方式图文详解
2013/06/11 PHP
一张表搞清楚php is_null、empty、isset的区别
2015/07/07 PHP
php短信接口代码
2016/05/13 PHP
PHP使用自定义方法实现数组合并示例
2016/07/07 PHP
检测是否已安装 .NET Framework 3.5的js脚本
2009/02/14 Javascript
Firefox div高度自适应
2009/04/28 Javascript
取选中的radio的值
2010/01/11 Javascript
javascript中对Attr(dom中属性)的操作示例讲解
2013/12/02 Javascript
jQuery防止click双击多次提交及传递动态函数或多参数
2014/04/02 Javascript
JS实现简单的图书馆享元模式实例
2015/06/30 Javascript
基于javascript实现彩票随机数生成(升级版)
2020/04/17 Javascript
JavaScript闭包实例详解
2016/06/03 Javascript
AngularJS ng-bind 指令简单实现
2016/07/30 Javascript
jQuery 局部div刷新和全局刷新方法总结
2016/10/05 Javascript
NodeJS学习笔记之Module的简介
2017/03/24 NodeJs
浏览器调试动态js脚本的方法(图解)
2018/01/19 Javascript
vue-cli结合Element-ui基于cropper.js封装vue实现图片裁剪组件功能
2018/03/01 Javascript
node实现简单的增删改查接口实例代码
2019/08/22 Javascript
在Vue中使用HOC模式的实现
2020/08/23 Javascript
解决Vue-cli3没有vue.config.js文件夹及配置vue项目域名的问题
2020/12/04 Vue.js
深入理解NumPy简明教程---数组3(组合)
2016/12/17 Python
使用Python快速搭建HTTP服务和文件共享服务的实例讲解
2018/06/04 Python
[原创]Python入门教程5. 字典基本操作【定义、运算、常用函数】
2018/11/01 Python
pyqt5 禁止窗口最大化和禁止窗口拉伸的方法
2019/06/18 Python
python的scipy实现插值的示例代码
2019/11/12 Python
Python如何向SQLServer存储二进制图片
2020/06/08 Python
解决django migrate报错ORA-02000: missing ALWAYS keyword
2020/07/02 Python
Python趣味入门教程之循环语句while
2020/08/26 Python
html5 touch事件实现页面上下滑动效果【附代码】
2016/03/10 HTML / CSS
菲律宾购物网站:Lazada菲律宾
2018/04/05 全球购物
意大利运动服减价商店:ScontoSport
2020/03/10 全球购物
2014年消防工作总结
2014/11/21 职场文书
2014年信用社工作总结
2014/11/25 职场文书
我的中国梦主题班会
2015/08/14 职场文书
2016暑期校本培训心得体会
2016/01/08 职场文书