jQuery實現(xiàn)的分子運動小球碰撞效果
本文實例講述了jQuery實現(xiàn)的分子運動小球碰撞效果。分享給大家供大家參考,具體如下:
先看效果圖吧,因為小球是運動狀態(tài)的,不好截圖,這里就先大體畫了一下路線,表示大體意思吧,如果想看真實的效果,自己粘貼下去運行:
小球有點小喲,嘿嘿,沒有對細節(jié)進行詳細的處理,如果像讓它完美一點,自己處理下吧!這里是模擬的理想狀態(tài)下的,沒有摩擦力與組里的分子碰撞運動,高科技喲~~~~~~mu~a
代碼也沒有整理,如果有心的話,把它整理成面向?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 = {}; // 最后一次碰撞坐標 var lastTime = ""; // 最后一次碰撞時間 var lastDirection = "top"; // 開始發(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); // 如果沒有發(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>
更多關于jQuery特效相關內(nèi)容感興趣的讀者可查看本站專題:《jQuery常見經(jīng)典特效匯總》及《jQuery動畫與特效用法總結(jié)》
希望本文所述對大家jQuery程序設計有所幫助。
- jquery實現(xiàn)隱藏在左側(cè)的彈性彈出菜單效果
- jQuery彈性滑動導航菜單實現(xiàn)思路及代碼
- Jquery實現(xiàn)彈性滑塊滑動選擇數(shù)值插件
- jQuery實現(xiàn)背景彈性滾動的導航效果
- 基于jQuery的煙花效果(運動相關)點擊屏幕出煙花
- jQuery實現(xiàn)跟隨鼠標運動圖層效果的方法
- jQuery拋物線運動實現(xiàn)方法(附完整demo源碼下載)
- jQuery實現(xiàn)橫向帶緩沖的水平運動效果(附demo源碼下載)
- jquery模擬實現(xiàn)鼠標指針停止運動事件
- jQuery模擬物體自由落體運動(附演示與demo源碼下載)
- jquery animate動畫持續(xù)運動的實例
- jQuery插件實現(xiàn)彈性運動完整示例
相關文章
jquery動態(tài)導航插件dynamicNav用法實例分析
這篇文章主要介紹了jquery動態(tài)導航插件dynamicNav用法,較為詳細的分析了jquery導航插件的原理及具體使用方法,具有一定參考借鑒價值,需要的朋友可以參考下2015-09-09基于jquery實現(xiàn)省市區(qū)三級聯(lián)動效果
這篇文章主要介紹了基于jquery實現(xiàn)省市區(qū)三級聯(lián)動效果,需要的朋友可以參考下2015-12-12jQuery插件Flexslider實現(xiàn)圖片輪播、圖文結(jié)合滑動切換效果
這篇文章主要介紹了jQuery插件Flexslider實現(xiàn)圖片輪播、圖文結(jié)合滑動切換效果的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-07-07JQuery.validate在ie8下不支持的快速解決方法
下面小編就為大家?guī)硪黄狫Query.validate在ie8下不支持的快速解決方法。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考,一起跟隨小編過來看看吧2016-05-05Jquery+bootstrap實現(xiàn)表格行置頂置底上移下移操作詳解
這篇文章主要為大家詳細介紹了Jquery+bootstrap實現(xiàn)表格行置頂置底上移下移操作,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02