电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Javascript摸擬自由落體與上拋運動原理與實現方法詳解

瀏覽:103日期:2023-11-05 13:59:22

本文實例講述了Javascript摸擬自由落體與上拋運動原理與實現方法。分享給大家供大家參考,具體如下:

JavaScript 代碼

//**************************************** //名稱:Javascript摸擬自由落體與上拋運動! //作者:Gloot //郵箱:glootz@gmail.com // QQ:345268267 //網站:http://www.cnblogs.com/editor/ //操作:在頁面不同地方點幾下 //*************************************** var $ = function(el) { return document.getElementById(el); }; function LuoRun() { this.h = 0; this.s = 0; this.g = 9.8; this.isup = false; this.rh = 0; this.t = 0; this.timer = null; this.mt = 0; this.top = 0; this.left = 0; this.id = null; } LuoRun.prototype.Po = function(obj) { this.left += 0.3; obj.style.left = (this.left)+’px’; if (!this.isup) {if (this.t == 0){ this.top = obj.offsetTop; this.h = 570 - 22 - this.top; this.mt = Math.sqrt(2*this.h/(this.g*100)); //alert(mt+’ ’+isup+’ ’+t)}this.t+=0.01;if (this.t >= this.mt){ this.t = this.mt; this.rh = (1/2)*this.g*this.t*this.t*100; this.s = this.g*this.t*100; obj.style.top = (this.rh+this.top)+’px’; //t = 0; this.s = this.s-50>0 ? this.s-50 : 0; this.isup = true; this.t = 0;}else{ this.rh = (1/2)*this.g*this.t*this.t*100; this.s = this.g*this.t*100; obj.style.top = (this.rh+this.top)+’px’;} } else { //up//return;if (this.s == 0) { clearInterval(this.timer); this.id.parentNode.removeChild(this.id); return;}if (this.t == 0) { this.h = this.s*this.s/(2*this.g*100); this.mt = this.s/(this.g*100); this.top = obj.offsetTop; //alert(mt+’ ’+isup+’ ’+t)}this.t+=0.01;if (this.t>=this.mt) { this.t = this.mt; this.rh = this.s*this.t - (1/2)*this.g*this.t*this.t*100; obj.style.top = (this.top - this.rh)+’px’; this.s = 0; this.isup = false; this.t = 0;}else { this.rh = this.s*this.t - (1/2)*this.g*this.t*this.t*100; obj.style.top = (this.top - this.rh)+’px’;} } } LuoRun.prototype.Go = function(obj) { var self = this; if (obj == null)obj = $(’box’); self.timer = setInterval(function() {self.Po(obj);if (self.h<=0) { clearInterval(self.timer); self.id.parentNode.removeChild(self.id);} },10); } document.onmousedown = function(e) { e = e?e:window.event; var crtDiv = document.createElement(’div’); crtDiv.style.position = ’absolute’; crtDiv.style.left = e.clientX + ’px’; crtDiv.style.top = e.clientY + ’px’; crtDiv.style.background = ’#333’; crtDiv.style.width = ’22px’; crtDiv.style.height = ’22px’; document.body.appendChild(crtDiv); crtDiv.innerHTML = ’&nbsp;’; var C = new LuoRun(); C.left = e.clientX; C.id = crtDiv; document.onmouseup = function() {document.onmousemove = null;window.setTimeout(function() { C.Go(crtDiv); },1000); } }Css 樣式

<style type='text/css'> td,body {font-size:12px;} .css1 {width:240px;display:table;position:absolute;left:20px;top:20px;border:1px solid green;background:#CAF4BD;line-height:18px;padding:3px;} .css2 {width:900px;height:22px;border-top:1px solid #333;position:absolute;top:570px;left:60px;}</style>Body Html代碼

<body> <form id='form1'> <div class='css1'> 名稱:Javascript摸擬自由落體與上拋運動!<br /> 作者:Gloot<br /> 郵箱:glootz@gmail.com <br /> QQ:345268267 <br /> 網站:http://www.cnblogs.com/editor/ <br /> 操作:在頁面不同地方點幾下 </div> <div class='css2'>&nbsp;</div> </form></body>代碼說明

function JsFunc() { this.a = ''; this.b = '';}JsFunc.prototype.method = function() { var me = this; me.a = 'method';}function init() { var func = new JsFunc(); func.method();}

JsFunc 類當于一個(C#中的)類;

var func = new JsFunc();

相當于初始化了一個類,創建了一個對象;

this.a, this.b 相當于 類中的成員;

JsFunc.prototype.method 相當于創建這個類下的一個方法函數;

如果這個JsFunc 多次 new 操作的話,其下 this成員,將各自的運行操作,互不影響;

所以當 對 JsFunc new 后創建一個新對象時,對這對象的成員或方法進行 setTimeout, setInterval 操作話,就會產生類似于并行操作的效果;

function LuoRun(){ this.h = 0; this.s = 0; this.g = 9.8; this.isup = false; this.rh = 0; this.t = 0; this.timer = null; this.mt = 0; this.top = 0; this.left = 0; this.id = null;}

this.s 表示速度;

this.h 表示設定的高度, 或物體上拋的最高高度;

this.isup 表示正處于上升還是下降狀態;

this.rn 表示下降距當前頂的位移,或上拋距離初始速度位置的位移;

this.t 下降或上拋的時間;

this.mt 表示從某一高度落體至某一低點所用的時間,或以某一初始速度上拋至零速度所用的時間;

this.timer 表示定時器

this.top, this.left 表示物體相對于容器頂部及左邊的當前偏移;

this.id 表示當前創建方塊的對象id值;

LuoRun.prototype.Po = function(obj) {}

表示物休自由落體及上拋運動的方法;

this.left += 0.3; 表示物體每落體或上拋向左跳動的偏移量(像素);

Po 方法是在定時器 setInterval 下拋行的一個動作,每次執行時都會根據配置偏移量以及自由落體及上拋相關公式計算當前參數值變化,并設定當前物體的位置;

obj.style.left = (this.left)+’px’; 初始化當前步驟的 左偏移;

落體狀態

if (!this.isup) {...} 表示是否是落體狀態;

if (this.t == 0){ this.top = obj.offsetTop; this.h = 570 - 22 - this.top; this.mt = Math.sqrt(2*this.h/(this.g*100)); //alert(mt+’ ’+isup+’ ’+t)}

當時間為 0 時,表示當前處于落體的最頂點,記錄當前距頂部的偏移值,設定落體的高度,以及計算此高度落體所用的時間;

if (this.t >= this.mt){ this.t = this.mt; this.rh = (1/2)*this.g*this.t*this.t*100; this.s = this.g*this.t*100; obj.style.top = (this.rh+this.top)+’px’; //t = 0; this.s = this.s-50>0 ? this.s-50 : 0; this.isup = true; this.t = 0;}

當落體所用時間,大于 this.mt 的最大時間時,將時間設置為 this.mt 的落體總時間;

this.rh 根據公式 1/2gt2 得出的位移值,會等于 this.h 的值,或接近于 this.h 的高度值;

this.s 根據 速度在加速度隨時間變化的公式計算出 當前的速度,也即最大帶度,這也是初始的上拋速度;

this.s = this.s-50>0 ? this.s-50 : 0;

這個 50 即為阻尼系數,即每次上拋所受阻力所減的速度值;

this.isup 設置 true; 表示進入上拋狀態;

obj.style.top = (this.rh+this.top)+’px’; 設置物體本步驟落體的當前位置;

上拋運行

if (this.t == 0) { this.h = this.s*this.s/(2*this.g*100); this.mt = this.s/(this.g*100); this.top = obj.offsetTop; //alert(mt+’ ’+isup+’ ’+t)}

當時間為 0 時,表示處于上拋開始點,計算 按落體后的速度及公式: v2/(2g) 上升的最大高度 this.h; 最大上升時間 this.mt; 保存當前距頂部的偏移 this.top;

if (this.t>=this.mt) { this.t = this.mt; this.rh = this.s*this.t - (1/2)*this.g*this.t*this.t*100; obj.style.top = (this.top - this.rh)+’px’; this.s = 0; this.isup = false; this.t = 0;}

當時間 this.t 大于 this.mt 這個最大上拋時間時,將時間設置為 this.mt;

this.rh 表示上拋的高度; 公式: vt - (1/2)gt2 ;

重置 this.t及this.s 時間與速度,并將 this.isup 置為 false,開始落體動作;

LuoRun.prototype.Go = function(obj) { var self = this; if (obj == null)obj = $(’box’); self.timer = setInterval(function() {self.Po(obj);if (self.h<=0) { clearInterval(self.timer); self.id.parentNode.removeChild(self.id);} },10);}

Go 是個定時器,10 毫秒執行一次物體偏移移動操作;

當 this.h 小于等于 0 時,清除物體,該對象方塊一個落體與上拋過程結束;

document.onmousedown = function(e) { e = e?e:window.event; var crtDiv = document.createElement(’div’); crtDiv.style.position = ’absolute’; crtDiv.style.left = e.clientX + ’px’; crtDiv.style.top = e.clientY + ’px’; crtDiv.style.background = ’#333’; crtDiv.style.width = ’22px’; crtDiv.style.height = ’22px’; document.body.appendChild(crtDiv); crtDiv.innerHTML = ’&nbsp;’; var C = new LuoRun(); C.left = e.clientX; C.id = crtDiv; document.onmouseup = function() {document.onmousemove = null;window.setTimeout(function() { C.Go(crtDiv); },1000); } }

當鼠標點擊頁面時,就創建一個灰黑底,寬高 22 像素的方塊;

并初始化 (創建新對象) LuoRun 類;

當鼠標松開后,過一秒鐘執行 LuoRun的 Go 定時器,開始表現物體的落體與上拋過程;

感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運行工具:http://tools.jb51.net/code/HtmlJsRun測試上述代碼運行效果。

更多關于JavaScript相關內容感興趣的讀者可查看本站專題:《JavaScript運動效果與技巧匯總》、《JavaScript切換特效與技巧總結》、《JavaScript查找算法技巧總結》、《JavaScript動畫特效與技巧匯總》、《JavaScript錯誤與調試技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript數學運算用法總結》

希望本文所述對大家JavaScript程序設計有所幫助。

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 电子万能试验机_液压拉力试验机_冲击疲劳试验机_材料试验机厂家-济南众标仪器设备有限公司 | 滑板场地施工_极限运动场地设计_滑板公园建造_盐城天人极限运动场地建设有限公司 | 工业废水处理|污水处理厂|废水治理设备工程技术公司-苏州瑞美迪 今日娱乐圈——影视剧集_八卦娱乐_明星八卦_最新娱乐八卦新闻 | 佛山商标注册_商标注册代理|专利注册申请_商标注册公司_鸿邦知识产权 | 全自动包装机_灌装机生产厂家-迈驰包装设备有限公司 | 全自动不干胶贴标机_套标机-上海今昂贴标机生产厂家 | 海南在线 海南一家| 武汉印刷厂-不干胶标签印刷厂-武汉不干胶印刷-武汉标签印刷厂-武汉标签制作 - 善进特种标签印刷厂 | 泰国专线_泰国物流专线_广州到泰国物流公司-泰廊曼国际 | 数控专用机床,专用机床,自动线,组合机床,动力头,自动化加工生产线,江苏海鑫机床有限公司 | 聚合甘油__盐城市飞龙油脂有限公司| 环比机械 | 广州二手电缆线回收,旧电缆回收,广州铜线回收-广东益福电缆线回收公司 | 膏剂灌装旋盖机-眼药水灌装生产线-西林瓶粉剂分装机-南通博琅机械科技 | 防火门|抗爆门|超大门|医疗门|隔声门-上海加汇门业生产厂家 | 样品瓶(色谱样品瓶)百科-浙江哈迈科技有限公司 | 齿式联轴器-弹性联轴器-联轴器厂家-江苏诺兴传动联轴器制造有限公司 | 临沂招聘网_人才市场_招聘信息_求职招聘找工作请认准【马头商标】 | 安平县鑫川金属丝网制品有限公司,防风抑尘网,单峰防风抑尘,不锈钢防风抑尘网,铝板防风抑尘网,镀铝锌防风抑尘网 | 100国际学校招生 - 专业国际学校择校升学规划 | 陕西高职单招-陕西高职分类考试网 | 广西正涛环保工程有限公司【官网】 | 浴室柜-浴室镜厂家-YINAISI · 意大利设计师品牌 | 咿耐斯 |-浙江台州市丰源卫浴有限公司 | 全自动五线打端沾锡机,全自动裁线剥皮双头沾锡机,全自动尼龙扎带机-东莞市海文能机械设备有限公司 | 黑龙江京科脑康医院-哈尔滨精神病医院哪家好_哈尔滨精神科医院排名_黑龙江精神心理病专科医院 | 移动机器人产业联盟官网 | 电缆故障测试仪_电缆故障定位仪_探测仪_检测仪器_陕西意联电气厂家 | 塑胶跑道_学校塑胶跑道_塑胶球场_运动场材料厂家_中国塑胶跑道十大生产厂家_混合型塑胶跑道_透气型塑胶跑道-广东绿晨体育设施有限公司 | 岩棉板|岩棉复合板|聚氨酯夹芯板|岩棉夹芯板|彩钢夹芯板-江苏恒海钢结构 | 999范文网_优质范文下载写作帮手| 青岛空压机,青岛空压机维修/保养,青岛空压机销售/出租公司,青岛空压机厂家电话 | 高效节能电机_伺服主轴电机_铜转子电机_交流感应伺服电机_图片_型号_江苏智马科技有限公司 | 深圳公司注册-工商注册公司-千百顺代理记账公司 | Magnescale探规,Magnescale磁栅尺,Magnescale传感器,Magnescale测厚仪,Mitutoyo光栅尺,笔式位移传感器-苏州连达精密量仪有限公司 | 振动筛,震动筛,圆形振动筛,振动筛价格,振动筛厂家-新乡巨宝机电 蒸汽热收缩机_蒸汽发生器_塑封机_包膜机_封切收缩机_热收缩包装机_真空机_全自动打包机_捆扎机_封箱机-东莞市中堡智能科技有限公司 | 急救箱-应急箱-急救包厂家-北京红立方医疗设备有限公司 | 注塑_注塑加工_注塑模具_塑胶模具_注塑加工厂家_深圳环科 | VI设计-LOGO设计公司-品牌设计公司-包装设计公司-导视设计-杭州易象设计 | 蔡司三坐标-影像测量机-3D扫描仪-蔡司显微镜-扫描电镜-工业CT-ZEISS授权代理商三本工业测量 | 砂磨机_立式纳米砂磨机_实验室砂磨机-广州儒佳化工设备厂家 | 二手电脑回收_二手打印机回收_二手复印机回_硒鼓墨盒回收-广州益美二手电脑回收公司 |