jquery小球碰撞效果程式碼例項
本章節分享一段程式碼例項,它實現了小球自由運動,與周邊四壁碰撞效果。
程式碼例項如下:
[HTML] 純文字檢視 複製程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style type="text/css"> body { margin: 0; padding: 0; } #box { margin: 0 auto; width: 500px; height: 500px; border: 3px solid #DDDDDD; 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> <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script> <script type="text/javascript"> var dim_half_past_PI = dimAngle(Math.PI / 2); // Math.PI/2的約數 var lastAngle = dimAngle(Math.PI / 8); // 發射角度(0-dimAngle(Math.PI)) var v = 120; //飛行速度【>0】 var lastPosition = {}; // 最後一次碰撞座標 var lastTime = ""; // 最後一次碰撞時間 var lastDirection = "top"; // 開始發射方向(top,bottom,left,right) var horizen = 1; // 水品方向的積數 var vertical = 1; // 豎直方向的積數 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); // 如果沒有發生碰撞 if (currentDirection != lastDirection) { // 如果發生了碰撞 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> </head> <body> <div id="box"> <div id="runner">●</div> </div> </body> </html>
相關文章
- canvas實現的小球四壁碰撞效果程式碼例項Canvas
- canvas小球隨機漂浮碰撞程式碼例項Canvas隨機
- js小球拋物線效果程式碼例項JS
- jQuery 動畫效果程式碼例項jQuery動畫
- canvas實現的彈力小球效果程式碼例項Canvas
- jquery 驗證碼效果程式碼例項jQuery
- js小球重力和碰撞效果JS
- jQuery tab選項卡效果程式碼例項jQuery
- jQuery加法驗證碼效果程式碼例項jQuery
- jQuery 隔行變色效果程式碼例項jQuery
- jQuery隔行變色效果程式碼例項jQuery
- jQuery雪花飄落效果程式碼例項jQuery
- jQuery進度條效果程式碼例項jQuery
- jQuery手風琴效果程式碼例項jQuery
- jQuery點選滑出層效果程式碼例項jQuery
- jQuery倒數計時效果程式碼例項jQuery
- jQuery繪製網格效果程式碼例項jQuery
- jQuery數字分頁效果程式碼例項jQuery
- jQuery background-position動畫效果程式碼例項jQuery動畫
- jQuery大圖跟隨效果程式碼例項jQuery
- jquery實現的選項卡效果例項程式碼jQuery
- jquery實現的分頁效果例項程式碼jQuery
- jQuery九宮格抽獎效果程式碼例項jQuery
- jquery尋找最佳路徑效果程式碼例項jQuery
- jQuery選項卡切換圖片效果程式碼例項jQuery
- jQuery is() 程式碼例項jQuery
- jquery實現的滑動軸效果程式碼例項jQuery
- jQuery標題自動頂貼效果程式碼例項jQuery
- jQuery列表上下垂直滾動效果程式碼例項jQuery
- jquery實現的人物關係圖效果程式碼例項jQuery
- jQuery類似電影院座位選取效果程式碼例項jQuery
- jQuery選項卡例項程式碼jQuery
- jQuery模擬支付寶密碼輸入效果程式碼例項jQuery密碼
- css切角效果程式碼例項CSS
- css模糊效果程式碼例項CSS
- canvas火焰效果程式碼例項Canvas
- jQuery操作cookie程式碼例項jQueryCookie
- jQuery事件冒泡程式碼例項jQuery事件