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 相关文章推荐
JS打开图片另存为对话框实现代码
Dec 26 Javascript
DOM基础教程之使用DOM设置文本框
Jan 20 Javascript
全面了解JS中的匿名函数
Jun 29 Javascript
AngularJS 入门教程之HTML DOM实例详解
Jul 28 Javascript
JS实现列表页面隔行变色效果
Mar 25 Javascript
详解vue-cli + webpack 多页面实例应用
Apr 25 Javascript
React.js中常用的ES6写法总结(推荐)
May 09 Javascript
JavaScript实现图片拖曳效果
Sep 08 Javascript
Angular2的管道Pipe的使用方法
Nov 07 Javascript
详解vue2.0+vue-video-player实现hls播放全过程
Mar 02 Javascript
基于elementUI使用v-model实现经纬度输入的vue组件
May 12 Javascript
vue项目中运用webpack动态配置打包多种环境域名的方法
Jun 24 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
实用函数8
2007/11/08 PHP
PHP实现多文件上传的方法
2015/07/08 PHP
JQuery 将元素显示在屏幕的中央的代码
2010/02/27 Javascript
jQuery select操作控制方法小结
2010/05/26 Javascript
ajax不执行success回调而是执行了error回调
2012/12/10 Javascript
jquery scroll()区分横向纵向滚动条的方法
2014/04/04 Javascript
js实现精美的银灰色竖排折叠菜单
2015/05/16 Javascript
微信小程序 MD5加密登录密码详解及实例代码
2017/01/12 Javascript
js通过keyCode值判断单击键盘上某个键,然后触发指定的事件方法
2017/02/19 Javascript
Angular2 路由问题修复详解
2017/03/01 Javascript
jQuery Jsonp跨域模拟搜索引擎
2017/06/17 jQuery
ECMAscript 变量作用域总结概括
2017/08/18 Javascript
微信小程序 scroll-view实现锚点滑动的示例
2017/12/06 Javascript
关于vue v-for 循环问题(一行显示四个,每一行的最右边那个计算属性)
2018/09/04 Javascript
cdn模式下vue的基本用法详解
2018/10/07 Javascript
JavaScript模板引擎应用场景及实现原理详解
2018/12/14 Javascript
javascript function(函数类型)使用与注意事项小结
2019/06/10 Javascript
vue微信分享插件使用方法详解
2020/02/18 Javascript
[01:31]DOTA2上海特级锦标赛 SECRET战队完整宣传片
2016/03/16 DOTA
Python math库 ln(x)运算的实现及原理
2019/07/17 Python
详解Anconda环境下载python包的教程(图形界面+命令行+pycharm安装)
2019/11/11 Python
Python面向对象封装操作案例详解 II
2020/01/02 Python
Python django框架开发发布会签到系统(web开发)
2020/02/12 Python
Python pyautogui模块实现鼠标键盘自动化方法详解
2020/02/17 Python
在keras里实现自定义上采样层
2020/06/28 Python
python如何使用腾讯云发送短信
2020/09/17 Python
python Tornado框架的使用示例
2020/10/19 Python
使用CSS3来绘制一个月食图案
2015/07/18 HTML / CSS
联想哥伦比亚网上商城:Lenovo Colombia
2017/01/10 全球购物
Ruby如何定义一个类
2012/10/08 面试题
Delphi软件工程师试题
2013/01/29 面试题
项目考察欢迎辞
2014/01/17 职场文书
运动会通讯稿400字
2014/01/28 职场文书
合理化建议书范文
2015/09/14 职场文书
Python办公自动化之教你用Python批量识别发票并录入到Excel表格中
2021/06/26 Python
JavaWeb 入门篇(3)ServletContext 详解 具体应用
2021/07/16 Java/Android