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之尺寸调整组件的深入解析
Jun 19 Javascript
jQuery CSS()方法改变现有的CSS样式表
Sep 09 Javascript
javascript实现加载xml文件的方法
Nov 24 Javascript
ionic3+Angular4实现接口请求及本地json文件读取示例
Oct 11 Javascript
AngularJS 教程及实例代码
Oct 23 Javascript
Angular搜索场景中使用rxjs的操作符处理思路
May 30 Javascript
vue使用中的内存泄漏【推荐】
Jul 10 Javascript
vue生命周期与钩子函数简单示例
Mar 13 Javascript
浅谈js闭包理解
Mar 28 Javascript
开发中常用的25个JavaScript单行代码(小结)
Jun 28 Javascript
vue 框架下自定义滚动条(easyscroll)实现方法
Aug 29 Javascript
原生JavaScript实现换肤
Feb 19 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
星际中的相关伤害
2020/03/04 星际争霸
PHP 下载文件时自动添加bom头的方法实例
2014/01/10 PHP
php实现图片以base64显示的方法
2016/10/13 PHP
js 刷新页面的代码小结 推荐
2010/04/02 Javascript
TreeView 用法(有代码)(asp.net)
2011/07/15 Javascript
ExtJS下 Ext.Direct加载和提交过程排错小结
2013/04/02 Javascript
js一般方法改写成面向对象方法的无限级折叠菜单示例代码
2013/07/04 Javascript
jQuery对val和atrr(&quot;value&quot;)赋值的区别介绍
2014/09/26 Javascript
Jquery修改页面标题title其它JS失效的解决方法
2014/10/31 Javascript
javascript实现C语言经典程序题
2015/11/29 Javascript
jQuery操作基本控件方法实例分析
2015/12/31 Javascript
JavaScript仿微博输入框效果(案例分析)
2016/12/06 Javascript
bootstrap jquery dataTable 异步ajax刷新表格数据的实现方法
2017/02/10 Javascript
使用watch监听路由变化和watch监听对象的实例
2018/02/24 Javascript
javaScript实现鼠标在文字上悬浮时弹出悬浮层效果
2020/04/12 Javascript
通过jQuery学习js类型判断的技巧
2019/05/27 jQuery
nodejs简单抓包工具使用详解
2019/08/23 NodeJs
JavaScript实现Tab选项卡切换
2020/02/13 Javascript
Python 创建子进程模块subprocess详解
2015/04/08 Python
python使用xlrd模块读写Excel文件的方法
2015/05/06 Python
Python编程实现删除VC临时文件及Debug目录的方法
2017/03/22 Python
Windows下安装python2和python3多版本教程
2017/03/30 Python
使用Django Form解决表单数据无法动态刷新的两种方法
2017/07/14 Python
Python爬取商家联系电话以及各种数据的方法
2018/11/10 Python
Python3实现的简单工资管理系统示例
2019/03/12 Python
不到20行代码用Python做一个智能聊天机器人
2019/04/19 Python
Python中的类与类型示例详解
2019/07/10 Python
Python通过kerberos安全认证操作kafka方式
2020/06/06 Python
详解Pycharm与anaconda安装配置指南
2020/08/25 Python
Clearly澳大利亚:购买眼镜、太阳镜和隐形眼镜
2018/04/26 全球购物
搞笑创意广告语
2014/03/17 职场文书
学校火灾防控方案
2014/06/09 职场文书
四风问题对照检查材料
2014/09/22 职场文书
2014年小学教导处工作总结
2014/12/19 职场文书
2015年新农合工作总结
2015/03/30 职场文书
nginx搭建NFS网络文件系统
2022/04/14 Servers