基于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 相关文章推荐
js 弹出新页面避免被浏览器、ad拦截的一种新方法
Apr 30 Javascript
javascript常用的正则表达式实例
May 15 Javascript
一个不错的字符串转码解码函数(自写)
Jul 31 Javascript
js防阻塞加载的实现方法
Sep 09 Javascript
Windows环境下npm install 报错: operation not permitted, rename的解决方法
Sep 26 Javascript
概述如何实现一个简单的浏览器端js模块加载器
Dec 07 Javascript
BootStrap fileinput.js文件上传组件实例代码
Feb 20 Javascript
jQuery EasyUI 为Combo,Combobox添加清除值功能的实例
Apr 13 jQuery
深入理解Vue transition源码分析
Jul 30 Javascript
JS中Object对象的原型概念基础
Jan 29 Javascript
JavaScript实现的DOM绘制柱状图效果示例
Aug 08 Javascript
Layui数据表格之获取表格中所有的数据方法
Aug 20 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获取当前所在目录位置的方法
2014/11/26 PHP
jQuery学习5 jQuery事件模型
2010/02/07 Javascript
使用jQuery实现的网页版的个人简历(可换肤)
2013/04/19 Javascript
jQuery之日期选择器的深入解析
2013/06/19 Javascript
JS判断对象是否存在的10种方法总结
2013/12/23 Javascript
ExtJS4给Combobox设置列表中的默认值示例
2014/05/02 Javascript
jQuery异步加载数据并添加事件示例
2014/08/24 Javascript
AngularJS语法详解(续)
2015/01/23 Javascript
全面解析JavaScript里的循环方法之forEach,for-in,for-of
2020/04/20 Javascript
Node学习记录之cluster模块
2017/05/31 Javascript
Vue报错:Uncaught TypeError: Cannot assign to read only property’exports‘ of object’#‘的解决方法
2017/06/17 Javascript
最全的JavaScript开发工具列表 总有一款适合你
2017/06/29 Javascript
在ABP框架中使用BootstrapTable组件的方法
2017/07/31 Javascript
JS+CSS实现网页加载中的动画效果
2017/10/27 Javascript
浅谈PDF.js使用心得
2018/06/07 Javascript
一份超级详细的Vue-cli3.0使用教程【推荐】
2018/11/15 Javascript
JavaScript模板引擎应用场景及实现原理详解
2018/12/14 Javascript
使用koa2创建web项目的方法步骤
2019/03/12 Javascript
详细分析Node.js 模块系统
2020/06/28 Javascript
[01:01:25]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第三局
2016/02/27 DOTA
python网络编程学习笔记(三):socket网络服务器
2014/06/09 Python
用Python编写生成树状结构的文件目录的脚本的教程
2015/05/04 Python
Python3使用pandas模块读写excel操作示例
2018/07/03 Python
python实时获取外部程序输出结果的方法
2019/01/12 Python
python中的句柄操作的方法示例
2019/06/20 Python
解决Python3 抓取微信账单信息问题
2019/07/19 Python
python3 sorted 如何实现自定义排序标准
2020/03/12 Python
python学习将数据写入文件并保存方法
2020/06/07 Python
中外合拍动画首获奥斯卡提名,“上海出品”《飞奔去月球》能否拿下最终大奖?
2021/03/16 国漫
CSS3中使用RGBA设置透明度的示例
2015/08/04 HTML / CSS
玩具反斗城美国官网:Toys"R"Us
2016/09/17 全球购物
文史专业毕业生自荐信
2013/11/17 职场文书
学生周末回家住宿长期请假条
2014/02/15 职场文书
预备党员入党自我评价范文
2014/03/10 职场文书
项目合作协议书
2014/09/23 职场文书
写给导师的自荐信
2015/03/06 职场文书