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 相关文章推荐
utf-8编码引起js输出中文乱码的解决办法
Jun 23 Javascript
纯JS实现本地图片预览的方法
Jul 31 Javascript
详解照片瀑布流效果(js,jquery分别实现与知识点总结)
Jan 01 Javascript
jQuery表单验证之密码确认
May 22 jQuery
最通俗易懂的javascript变量提升详解
Aug 05 Javascript
微信小程序 配置顶部导航条标题颜色的实现方法
Sep 20 Javascript
JavaScript 正则命名分组【推荐】
Jun 07 Javascript
深入浅出理解JavaScript高级定时器原理与用法
Aug 02 Javascript
详解npm 配置项registry修改为淘宝镜像
Sep 07 Javascript
ES6 如何改变JS内置行为的代理与反射
Feb 11 Javascript
jQuery实现的导航条点击后高亮显示功能示例
Mar 04 jQuery
关于layui 下拉列表的change事件详解
Sep 20 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
php学习笔记 PHP面向对象的程序设计
2011/06/13 PHP
PHP中CURL的CURLOPT_POSTFIELDS参数使用细节
2014/03/17 PHP
php实现与erlang的二进制通讯实例解析
2014/07/23 PHP
php json_encode()函数返回json数据实例代码
2014/10/10 PHP
php实现的mongoDB单例模式操作类
2018/01/20 PHP
Google的跟踪代码 动态加载js代码方法应用
2012/11/12 Javascript
node.js中的path.isAbsolute方法使用说明
2014/12/08 Javascript
深入理解JavaScript系列(34):设计模式之命令模式详解
2015/03/03 Javascript
Bootstrap 模态框(Modal)带参数传值实例
2017/08/20 Javascript
详解动画插件wow.js的使用方法
2017/09/13 Javascript
原生JS实现ajax与ajax的跨域请求实例
2017/12/01 Javascript
vue2中使用less简易教程
2018/03/27 Javascript
利用angular自动编译andriod APK的绕坑经历分享
2019/03/08 Javascript
记一次Vue.js混入mixin的使用(分权限管理页面)
2019/04/17 Javascript
layui表格 返回的数据状态异常的解决方法
2019/09/10 Javascript
使用layui+ajax实现简单的菜单权限管理及排序的方法
2019/09/10 Javascript
[56:41]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Newbee vs OG
2018/04/01 DOTA
Python selenium 父子、兄弟、相邻节点定位方式详解
2016/09/15 Python
详解Python中的静态方法与类成员方法
2017/02/28 Python
对python中return和print的一些理解
2017/08/18 Python
浅谈Python处理PDF的方法
2017/11/10 Python
解决Pycharm下面出现No R interpreter defined的问题
2018/10/29 Python
对Python中画图时候的线类型详解
2019/07/07 Python
解决Django删除migrations文件夹中的文件后出现的异常问题
2019/08/31 Python
python字符串替换re.sub()方法解析
2019/09/18 Python
python线程join方法原理解析
2020/02/11 Python
Django查询优化及ajax编码格式原理解析
2020/03/25 Python
Python Django中间件使用原理及流程分析
2020/06/13 Python
美国保健品专家:Life Extension
2018/05/04 全球购物
房屋出售协议书
2014/04/10 职场文书
生产现场禁烟通知
2015/04/23 职场文书
中秋节晚会开场白
2015/05/29 职场文书
退休职工欢送会致辞
2015/08/01 职场文书
图书馆义工感想
2015/08/07 职场文书
企业年会祝酒词
2015/08/11 职场文书
2016年中学清明节活动总结
2016/04/01 职场文书