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中传递特殊字符(+,&amp;)的方法
Jan 16 Javascript
jquery实现对联广告的方法
Feb 05 Javascript
javascript针对不确定函数的执行方法
Dec 16 Javascript
JavaScript获取select中text值的方法
Feb 13 Javascript
angular.JS实现网页禁用调试、复制和剪切
Mar 31 Javascript
vue 打包后的文件部署到express服务器上的方法
Aug 09 Javascript
JS 仿支付宝input文本输入框放大组件的实例
Nov 14 Javascript
vue-cli3 从搭建到优化的详细步骤
Jan 20 Javascript
如何用JavaScript实现功能齐全的单链表详解
Feb 11 Javascript
mpvue实现左侧导航与右侧内容的联动
Oct 21 Javascript
vue项目出现页面空白的解决方案
Oct 31 Javascript
vue子传父关于.sync与$emit的实现
Nov 05 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适配器模式(Adapter)
2014/11/25 PHP
PHP使用fopen与file_get_contents读取文件实例分享
2016/03/04 PHP
JavaScript获取GridView中用户点击控件的行号,列号
2009/04/14 Javascript
js中scrollHeight,scrollWidth,scrollLeft,scrolltop等差别介绍
2012/05/16 Javascript
Extjs Gird 支持中文拼音排序实现代码
2013/04/15 Javascript
jQuery实现拖动调整表格单元格大小的代码实例
2015/01/13 Javascript
jQuery遍历页面所有CheckBox查看是否被选中的方法
2015/04/14 Javascript
JS中artdialog弹出框控件之提交表单思路详解
2016/04/18 Javascript
基于jQuery实现仿QQ空间送礼物功能代码
2016/05/24 Javascript
Highcharts 多个Y轴动态刷新数据的实现代码
2016/05/28 Javascript
AngularJS通过ng-route实现基本的路由功能实例详解
2016/12/13 Javascript
jQuery+HTML5实现弹出创意搜索框层
2016/12/29 Javascript
nodejs批量下载图片的实现方法
2017/05/19 NodeJs
js es6系列教程 - 新的类语法实战选项卡(详解)
2017/09/02 Javascript
Three.js基础学习教程
2017/11/16 Javascript
使用JavaScript中的lodash编写双色球效果
2018/06/24 Javascript
ES5 模拟 ES6 的 Symbol 实现私有成员功能示例
2020/05/06 Javascript
JavaScript实现移动端拖动元素
2020/11/24 Javascript
详解Vue的七种传值方式
2021/02/08 Vue.js
Python multiprocessing.Manager介绍和实例(进程间共享数据)
2014/11/21 Python
使用Python脚本操作MongoDB的教程
2015/04/16 Python
Python实现的读取/更改/写入xml文件操作示例
2018/08/30 Python
python版大富翁源代码分享
2018/11/19 Python
Python常见的pandas用法demo示例
2019/03/16 Python
keras 权重保存和权重载入方式
2020/05/21 Python
英国奢侈品概念店:Base Blu
2019/05/16 全球购物
美国二手复古奢侈品包包购物网站:LXRandCo
2019/06/18 全球购物
编程实现去掉XML的重复结点
2014/05/28 面试题
企划主管岗位职责
2013/12/12 职场文书
电力公司个人求职信范文
2014/02/04 职场文书
《天安门广场》教学反思
2014/04/23 职场文书
实习报告评语
2014/04/26 职场文书
初二数学教学反思
2016/02/17 职场文书
python用字节处理文件实例讲解
2021/04/13 Python
idea搭建可运行Servlet的Web项目
2021/06/26 Java/Android
MySQL数据库安装方法与图形化管理工具介绍
2022/05/30 MySQL