js+html5实现的自由落体运动效果代码


Posted in Javascript onJanuary 28, 2016

本文实例讲述了js+html5实现的自由落体运动效果。分享给大家供大家参考,具体如下:

运行效果截图如下:

js+html5实现的自由落体运动效果代码

具体代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
 <title>canvas自由落体</title>
 <script type="text/javascript" >
  var canvasheight = 500;
  var canvaswidth = 500;
  var g = 9.8;
  var plusV = 0.5;
  function Block(vo, x, y, width, height, g, context) {
   var _self = this;
   _self.vo = vo || 0;
   _self.x = x;
   _self.y = y;
   _self.prevX = x;
   _self.prevY = y;
   _self.g = g;
   _self.height = height;
   _self.width = width;
   _self.prevTime = new Date().getTime();
   context.fillStyle = "black";
   _self.down = function () {
    var time = (new Date().getTime() - _self.prevTime) / 200,
     y = _self.vo * time + 1 / 2 * _self.g * time * time + _self.y;
    //console.log("down:time=" + time + ":y=" + y + ":" + _self.vo);
    if (y + _self.height >= canvasheight) {
     _self.g--;
     _self.vo = _self.g * time;
     _self.prevTime = new Date().getTime();
     _self.up();
    } else {
     context.clearRect(_self.prevX, _self.prevY - 1, _self.prevX + _self.height, _self.prevY + _self.width);
     context.fillRect(_self.x, y, _self.width, _self.height);
     _self.prevX = x;
     _self.prevY = y;
     setTimeout(function () {
      _self.down();
     }, 30);
    }
   }
   _self.up = function () {
    var time = (new Date().getTime() - _self.prevTime) / 200,
     v = _self.vo - _self.g * time,
     y = canvasheight - _self.height - _self.vo * time + 1 / 2 * _self.g * time * time;
    //console.log("up:time=" + time + ":v=" + v);
    if (v <= 0) {
     _self.vo = 0;
     _self.y = y;
     _self.prevTime = new Date().getTime();
     if (y + _self.height < canvasheight) {
      _self.down();
     } else {
      return;
     }
    } else {
     context.clearRect(_self.prevX, _self.prevY - 1, _self.prevX + _self.height , _self.prevY + _self.width);
     context.fillRect(x, y, _self.width, _self.height);
     _self.prevX = x;
     _self.prevY = y;
     setTimeout(function () {
      _self.up();
     }, 30);
    }
   }
  }
  window.onload = function () {
   var canvas = document.getElementById('canvas');
   var context = canvas.getContext('2d');
   height = canvas.offsetHeight;
   var block = new Block(0, 100, 0, 20, 20, g, context);
   block.down();
  }
 </script>
</head>
<body>
<center>
<canvas id="canvas" width="500" height="500" style="background:#DDDDDD" ></canvas>
</center>
<input type="button" value="stop" onclick="stop()" />
<input type="button" value="start" onclick="start()" />
</body>
</html>

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
基于jquery.Jcrop的头像编辑器
Mar 01 Javascript
关于javascript中this关键字(翻译+自我理解)
Oct 20 Javascript
jQuery 版元素拖拽原型代码
Apr 25 Javascript
javascript实现锁定网页、密码解锁效果(类似系统屏幕保护效果)
Aug 15 Javascript
JavaScript如何实现在文本框(密码框)输入提示语
Dec 25 Javascript
jquery hover 不停闪动问题的解决方法(亦为stop()的使用)
Feb 10 Javascript
深入理解Javascript中的观察者模式
Feb 20 Javascript
浅谈Vue的加载顺序探讨
Oct 25 Javascript
详解将微信小程序接口Promise化并使用async函数
Aug 05 Javascript
Element-UI+Vue模式使用总结
Jan 02 Javascript
写给新手同学的vuex快速上手指北小结
Apr 14 Javascript
在vue中嵌入外部网站的实现
Nov 13 Javascript
js判断上传文件后缀名是否合法
Jan 28 #Javascript
Angular中$compile源码分析
Jan 28 #Javascript
实例讲解JS中setTimeout()的用法
Jan 28 #Javascript
jQuery+canvas实现的球体平抛及颜色动态变换效果
Jan 28 #Javascript
jQuery+canvas实现简单的球体斜抛及颜色动态变换效果
Jan 28 #Javascript
基于javascript实现动态显示当前系统时间
Jan 28 #Javascript
jQuery实现div随意拖动的实例代码(通用代码)
Jan 28 #Javascript
You might like
dedecms 批量提取第一张图片最为缩略图的代码(文章+软件)
2009/10/29 PHP
基于thinkPHP实现的微信自定义分享功能示例
2016/09/23 PHP
js 蒙版进度条(结合图片)
2010/03/10 Javascript
JavaScript单元测试ABC
2012/04/12 Javascript
webapp框架AngularUI的demo改造之路
2014/12/21 Javascript
JS限制文本框只能输入数字和字母方法
2015/02/28 Javascript
js实现上传图片及时预览
2016/05/07 Javascript
JavaScript必知必会(十) call apply bind的用法说明
2016/06/08 Javascript
jQuery文字提示与图片提示效果实现方法
2016/07/04 Javascript
BOM系列第一篇之定时器setTimeout和setInterval
2016/08/17 Javascript
Bootstrap CSS布局之图像
2016/12/17 Javascript
Javascript中的 “&amp;” 和 “|” 详解
2017/02/02 Javascript
Vue2.x中的父组件传递数据至子组件的方法
2017/05/01 Javascript
Node.js自定义实现文件路由功能
2017/09/22 Javascript
jQuery实现form表单序列化转换为json对象功能示例
2018/05/23 jQuery
微信小程序上传图片功能(附后端代码)
2020/06/19 Javascript
nuxt 每个页面head标签内容设置方式
2020/11/05 Javascript
Python文件去除注释的方法
2015/05/25 Python
Python中Django框架下的staticfiles使用简介
2015/05/30 Python
python实现各进制转换的总结大全
2017/06/18 Python
新手常见6种的python报错及解决方法
2018/03/09 Python
python 重定向获取真实url的方法
2018/05/11 Python
python 通过 socket 发送文件的实例代码
2018/08/14 Python
Python实现爬取马云的微博功能示例
2019/02/16 Python
Python中使用__new__实现单例模式并解析
2019/06/25 Python
Django--权限Permissions的例子
2019/08/28 Python
Python用类实现扑克牌发牌的示例代码
2020/06/01 Python
C语言面试题
2015/10/30 面试题
促销活动策划方案
2014/01/12 职场文书
渡河少年教学反思
2014/02/12 职场文书
《鱼游到了纸上》教学反思
2014/02/20 职场文书
幼儿园六一儿童节主持节目串词
2014/03/21 职场文书
管理标语大全
2014/06/24 职场文书
幼儿园安全责任书范本
2014/07/24 职场文书
长辈生日祝福语大全(72句)
2019/08/09 职场文书
Python数据分析之绘图和可视化详解
2021/06/02 Python