基于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 相关文章推荐
兼容ie和firefox js关闭代码
Dec 11 Javascript
javascript 硬盘序列号+其它硬件信息
Dec 23 Javascript
一张表格告诉你windows.onload()与$(document).ready()的区别
May 16 Javascript
通过Jquery的Ajax方法读取将table转换为Json
May 31 Javascript
JavaScript实现的石头剪刀布游戏源码分享
Aug 22 Javascript
node中socket.io的事件使用详解
Dec 15 Javascript
AngularJS中的模块详解
Jan 29 Javascript
清除浏览器缓存的几种方法总结(必看)
Dec 09 Javascript
Vue 路由 过渡动效 数据获取方法
Jul 31 Javascript
JQuery发送ajax请求时中文乱码问题解决
Nov 14 jQuery
autojs 蚂蚁森林能量自动拾取即给指定好友浇水的实现方法
May 03 Javascript
vue 组件间的通信之子组件向父组件传值的方式
Jul 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 网页过期时间的控制代码
2009/06/29 PHP
关于Sphinx创建全文检索的索引介绍
2013/06/25 PHP
PHP 使用pcntl和libevent 实现Timer功能
2013/10/27 PHP
PHP使用Session实现上传进度功能详解
2019/08/06 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
2020/02/16 PHP
Extjs学习过程中新手容易碰到的低级错误积累
2010/02/11 Javascript
用javascript作一个通用向导说明
2011/08/30 Javascript
js判断选择的时间是否大于今天的代码
2013/08/20 Javascript
angularJS提交表单(form)
2015/02/09 Javascript
javascript实现的右下角弹窗实例
2015/04/24 Javascript
javascript鼠标右键菜单自定义效果
2020/12/08 Javascript
超详细的JS弹出窗口代码大全
2020/04/18 Javascript
jQuery 特性操作详解及实例代码
2016/09/29 Javascript
JS实现隔行换色的表格排序
2017/03/27 Javascript
Angular2使用Augury来调试Angular2程序
2017/05/21 Javascript
简单实现jQuery轮播效果
2017/08/18 jQuery
JS实现的贪吃蛇游戏案例详解
2019/05/01 Javascript
微信小程序中限制激励式视频广告位显示次数(实现思路)
2019/12/06 Javascript
js利用拖放实现添加删除
2020/08/27 Javascript
JavaScript实现打字游戏
2021/02/19 Javascript
Python的高级Git库 Gittle
2014/09/22 Python
浅谈python中set使用
2016/06/30 Python
python机器学习之神经网络(一)
2017/12/20 Python
Python+OpenCV让电脑帮你玩微信跳一跳
2018/01/04 Python
python中threading开启关闭线程操作
2020/05/02 Python
整理HTML5移动端开发的常用触摸事件
2016/04/15 HTML / CSS
大专毕业生自我评价分享
2013/11/10 职场文书
幼儿园五一活动方案
2014/02/07 职场文书
高中生职业生涯规划书
2014/02/24 职场文书
打架赔偿协议书范本
2014/10/26 职场文书
2014年法制宣传日活动方案
2014/11/02 职场文书
酒店客房服务员岗位职责
2015/04/09 职场文书
工作一年自我鉴定
2019/06/20 职场文书
小学五年级(说明文3篇)
2019/08/13 职场文书
CSS3 天气图标动画效果
2021/04/06 HTML / CSS
Elasticsearch 聚合查询和排序
2022/04/19 Python