jQuery實(shí)現(xiàn)的分子運(yùn)動(dòng)小球碰撞效果
本文實(shí)例講述了jQuery實(shí)現(xiàn)的分子運(yùn)動(dòng)小球碰撞效果。分享給大家供大家參考,具體如下:
先看效果圖吧,因?yàn)樾∏蚴沁\(yùn)動(dòng)狀態(tài)的,不好截圖,這里就先大體畫(huà)了一下路線(xiàn),表示大體意思吧,如果想看真實(shí)的效果,自己粘貼下去運(yùn)行:
小球有點(diǎn)小喲,嘿嘿,沒(méi)有對(duì)細(xì)節(jié)進(jìn)行詳細(xì)的處理,如果像讓它完美一點(diǎn),自己處理下吧!這里是模擬的理想狀態(tài)下的,沒(méi)有摩擦力與組里的分子碰撞運(yùn)動(dòng),高科技喲~~~~~~mu~a
代碼也沒(méi)有整理,如果有心的話(huà),把它整理成面向?qū)ο笮问降陌桑?/p>
代碼如下:
<!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></title> <script src="jquery-1.7.1.min.js" type="text/javascript"></script> <script type="text/javascript" > var dim_half_past_PI = dimAngle(Math.PI / 2); // Math.PI/2的約數(shù) var lastAngle = dimAngle(Math.PI/8); // 發(fā)射角度(0-dimAngle(Math.PI)) var v = 120; //飛行速度【>0】 var lastPosition = {}; // 最后一次碰撞坐標(biāo) var lastTime = ""; // 最后一次碰撞時(shí)間 var lastDirection = "top"; // 開(kāi)始發(fā)射方向(top,bottom,left,right) var horizen = 1; // 水品方向的積數(shù) var vertical = 1; // 豎直方向的積數(shù) var box = {}; function dimAngle(angle) { var tempAngle = angle + ""; return parseFloat(tempAngle.substring(0, 6)); } function getWillDirection(position, box) { var direction = lastDirection; if (position.x < box.left) { direction = "right"; } if (position.x > box.right) { direction = "left" } if (position.y < box.top) { direction = "bottom"; } if (position.y > box.bottom) { direction = "top"; } return direction; } function getScale(direction, angle) { switch(direction){ case "top": vertical = -1; if (angle < dim_half_past_PI) { horizen = 1; } if (angle > dim_half_past_PI) { horizen = -1; } if (angle == dim_half_past_PI) { horizen = 0; } break; case "left": horizen = -1; if (angle > dim_half_past_PI) { vertical = 1; } if (angle < dim_half_past_PI) { vertical = -1; } if (angle == dim_half_past_PI) { vertical = 0; } break; case "bottom": vertical = 1; if(angle > dim_half_past_PI) { horizen = 1; } if(angle < dim_half_past_PI) { horizen = -1; } if(angle == dim_half_past_PI) { horizen = 0; } break; case "right": horizen = 1; if (angle > dim_half_past_PI) { vertical = -1; } if (angle < dim_half_past_PI) { vertical = 1; } if (angle == dim_half_past_PI) { vertical = 0; } break; } } function getOutAngle(inAngle) { if (inAngle == dim_half_past_PI || inAngle == 0) { return inAngle; } else { return dim_half_past_PI - inAngle; } } function setPosition(obj, position) { obj.css({ "left": position.x +"px", "top": position.y +"px"}); } function run(obj) { var vx = Math.cos(lastAngle) * v; var vy = Math.sin(lastAngle) * v; var runTime = (new Date().getTime() - lastTime) / 1000; getScale(lastDirection, lastAngle); var sx = vx * runTime * horizen; var sy = vy * runTime * vertical; var position = { x: lastPosition.x + sx, y: lastPosition.y + sy }; setPosition(obj, position); var currentDirection = getWillDirection(position, box); console.log(currentDirection +":"+lastDirection+":"+vertical+":"+horizen+":"+lastAngle+":"+dim_half_past_PI); // 如果沒(méi)有發(fā)生碰撞 if (currentDirection != lastDirection) { // 如果發(fā)生了碰撞 lastDirection = currentDirection; lastPosition = position; lastTime = new Date().getTime(); lastAngle = getOutAngle(lastAngle); } setTimeout(function () { run(obj); }, 30); } $(document).ready(function () { var boxer = $("#box"); var x = parseInt(boxer.offset().left); var y = parseInt(boxer.offset().top); box = { left: x, top: y, right: x + boxer.width(), bottom: y + boxer.height() }; var runner = $("#runner"); lastTime = new Date().getTime(); lastPosition = { x: x, y: y + boxer.height() }; run(runner); }); </script> <style type="text/css" > body { margin:0; padding:0; } #box { margin:0 auto; width:500px; height:500px; border:3px solid #DDDDDD; border-radius:4px; -wekit-border-radius:4px; -moz-border-radius:4px;} #runner { width:10px; height:10px; font-size:10px; color:black; padding:0; position:absolute; left:100px; top:480px;} </style> </head> <body> <div id="box"> <div id="runner">●</div> </div> </body> </html>
更多關(guān)于jQuery特效相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《jQuery常見(jiàn)經(jīng)典特效匯總》及《jQuery動(dòng)畫(huà)與特效用法總結(jié)》
希望本文所述對(duì)大家jQuery程序設(shè)計(jì)有所幫助。
- jquery實(shí)現(xiàn)隱藏在左側(cè)的彈性彈出菜單效果
- jQuery彈性滑動(dòng)導(dǎo)航菜單實(shí)現(xiàn)思路及代碼
- Jquery實(shí)現(xiàn)彈性滑塊滑動(dòng)選擇數(shù)值插件
- jQuery實(shí)現(xiàn)背景彈性滾動(dòng)的導(dǎo)航效果
- 基于jQuery的煙花效果(運(yùn)動(dòng)相關(guān))點(diǎn)擊屏幕出煙花
- jQuery實(shí)現(xiàn)跟隨鼠標(biāo)運(yùn)動(dòng)圖層效果的方法
- jQuery拋物線(xiàn)運(yùn)動(dòng)實(shí)現(xiàn)方法(附完整demo源碼下載)
- jQuery實(shí)現(xiàn)橫向帶緩沖的水平運(yùn)動(dòng)效果(附demo源碼下載)
- jquery模擬實(shí)現(xiàn)鼠標(biāo)指針停止運(yùn)動(dòng)事件
- jQuery模擬物體自由落體運(yùn)動(dòng)(附演示與demo源碼下載)
- jquery animate動(dòng)畫(huà)持續(xù)運(yùn)動(dòng)的實(shí)例
- jQuery插件實(shí)現(xiàn)彈性運(yùn)動(dòng)完整示例
相關(guān)文章
jquery動(dòng)態(tài)導(dǎo)航插件dynamicNav用法實(shí)例分析
這篇文章主要介紹了jquery動(dòng)態(tài)導(dǎo)航插件dynamicNav用法,較為詳細(xì)的分析了jquery導(dǎo)航插件的原理及具體使用方法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-09-09基于jquery實(shí)現(xiàn)省市區(qū)三級(jí)聯(lián)動(dòng)效果
這篇文章主要介紹了基于jquery實(shí)現(xiàn)省市區(qū)三級(jí)聯(lián)動(dòng)效果,需要的朋友可以參考下2015-12-12jQuery插件Flexslider實(shí)現(xiàn)圖片輪播、圖文結(jié)合滑動(dòng)切換效果
這篇文章主要介紹了jQuery插件Flexslider實(shí)現(xiàn)圖片輪播、圖文結(jié)合滑動(dòng)切換效果的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-07-07JQuery.validate在ie8下不支持的快速解決方法
下面小編就為大家?guī)?lái)一篇JQuery.validate在ie8下不支持的快速解決方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧2016-05-05Jquery+bootstrap實(shí)現(xiàn)表格行置頂置底上移下移操作詳解
這篇文章主要為大家詳細(xì)介紹了Jquery+bootstrap實(shí)現(xiàn)表格行置頂置底上移下移操作,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02JQueryEasyUI datagrid框架的進(jìn)階使用
本篇文章小編為大家介紹JQueryEasyUI datagrid框架的基本使用,有需要的朋友可以參考一下2013-04-04jQuery縱向?qū)Ш讲藛涡Ч麑?shí)現(xiàn)方法
這篇文章主要介紹了jQuery縱向?qū)Ш讲藛涡Ч麑?shí)現(xiàn)方法,可實(shí)現(xiàn)類(lèi)似淘寶首頁(yè)縱向菜單的顯示效果,涉及jQuery鼠標(biāo)響應(yīng)及頁(yè)面元素屬性動(dòng)態(tài)操作相關(guān)技巧,需要的朋友可以參考下2016-12-12