国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

原生JS實(shí)現(xiàn)多個(gè)小球碰撞反彈效果示例

來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:20:37
文檔

原生JS實(shí)現(xiàn)多個(gè)小球碰撞反彈效果示例

原生JS實(shí)現(xiàn)多個(gè)小球碰撞反彈效果示例:本文實(shí)例講述了原生JS實(shí)現(xiàn)多個(gè)小球碰撞反彈效果。分享給大家供大家參考,具體如下: 實(shí)現(xiàn)思路:小球的移動(dòng),是通過(guò)改變小球的left和top值來(lái)改變,坐標(biāo)分別為(x,y)當(dāng)x/y值加到最大,即加到父級(jí)的寬度或者高度時(shí),使x值或者y值減小,同理當(dāng)x值或者y值減到最小
推薦度:
導(dǎo)讀原生JS實(shí)現(xiàn)多個(gè)小球碰撞反彈效果示例:本文實(shí)例講述了原生JS實(shí)現(xiàn)多個(gè)小球碰撞反彈效果。分享給大家供大家參考,具體如下: 實(shí)現(xiàn)思路:小球的移動(dòng),是通過(guò)改變小球的left和top值來(lái)改變,坐標(biāo)分別為(x,y)當(dāng)x/y值加到最大,即加到父級(jí)的寬度或者高度時(shí),使x值或者y值減小,同理當(dāng)x值或者y值減到最小

本文實(shí)例講述了原生JS實(shí)現(xiàn)多個(gè)小球碰撞反彈效果。分享給大家供大家參考,具體如下:

實(shí)現(xiàn)思路:小球的移動(dòng),是通過(guò)改變小球的left和top值來(lái)改變,坐標(biāo)分別為(x,y)當(dāng)x/y值加到最大,即加到父級(jí)的寬度或者高度時(shí),使x值或者y值減小,同理當(dāng)x值或者y值減到最小時(shí),同樣的使x值或者y值增加,以上的思路可以實(shí)現(xiàn)小球的碰壁反彈

小球與小球之間的碰撞,要判斷小球在被撞小球的哪個(gè)方向,從而判斷小球該向哪個(gè)方向移動(dòng),同樣的改變小球的坐標(biāo)值,來(lái)實(shí)現(xiàn)小球的反彈

實(shí)現(xiàn)代碼:

<!doctype html>
<html lang="en">
 <head>
 <meta charset="UTF-8" />
 <title>小球碰撞</title>
 <style type="text/css">
 * {
 margin: 0;
 padding: 0;
 }
 #wrap {
 height: 800px;
 width: 1300px;
 border: 1px solid red;
 /*小球設(shè)置相對(duì)定位*/
 position: relative;
 margin: 0 auto;
 overflow: hidden;
 }
 p {
 width: 40px;
 height: 40px;
 border-radius: 50%;
 background-color: red;
 position: absolute;
 top: 0;
 left: 0;
 color: white;
 font-size: 25px;
 text-align: center;
 line-height: 40px;
 }
 </style>
 </head>
 <body>
 <div id="wrap">
 </div>
 </body>
 <!--<script src="js/common.js" type="text/javascript" charset="utf-8"></script>-->
 <script type="text/javascript">
 /**
 * 生成并返回一個(gè)從m到n全區(qū)間的隨機(jī)數(shù)
 * @param {Object} m
 * @param {Object} n
 */
 function randomNum(m, n) {
 return Math.floor(Math.random() * (n - m + 1) + m);
 }
 /**
 * 生成一個(gè)隨機(jī)顏色,并返回rgb字符串值
 */
 function randomColor() {
 var r = randomNum(0, 255);
 var g = randomNum(0, 255);
 var b = randomNum(0, 255);
 return "rgb(" + r + "," + g + "," + b + ")";
 }
 //獲得wrapDiv
 var wrapDiv = document.getElementById("wrap");
 //定義數(shù)組存儲(chǔ)所有的小球
 var balls = [];
 //生成小球函數(shù)
 function createBalls() {
 for (var i = 0; i < 20; i++) {
 var ball = document.createElement("p");
 //隨機(jī)小球起始的X坐標(biāo)和小球的Y坐標(biāo)
 ball.x = randomNum(0, 1200);
 ball.y = randomNum(0, 700);
 //隨機(jī)小球的移動(dòng)速度
 ball.speed = randomNum(2, 5);
 //隨機(jī)小球移動(dòng)的方向
 if (Math.random() - 0.5 > 0) {
 ball.xflag = true;
 } else {
 ball.xflag = false;
 }
 if (Math.random() - 0.5 > 0) {
 ball.yflag = true;
 } else {
 ball.yflag = false;
 }
 //隨機(jī)小球的背景顏色
 ball.style.backgroundColor = randomColor();
 ball.innerHTML = i + 1;
 //將小球插入當(dāng)wrapDiv中
 wrapDiv.appendChild(ball);
 //將所有的小球存儲(chǔ)到數(shù)組中
 balls.push(ball);
 }
 }
 createBalls();
 //小球移動(dòng)函數(shù),判斷小球的位置
 function moveBalls(ballObj) {
 setInterval(function() {
 ballObj.style.top = ballObj.y + "px";
 ballObj.style.left = ballObj.x + "px";
 //判斷小球的標(biāo)志量,對(duì)小球作出相應(yīng)操作
 if (ballObj.yflag) {
 //小球向下移動(dòng)
 ballObj.y += ballObj.speed;
 if (ballObj.y >= 800 - ballObj.offsetWidth) {
 ballObj.y = 800 - ballObj.offsetWidth;
 ballObj.yflag = false;
 }
 } else {
 //小球向上移動(dòng)
 ballObj.y -= ballObj.speed;
 if (ballObj.y <= 0) {
 ballObj.y = 0;
 ballObj.yflag = true;
 }
 }
 if (ballObj.xflag) {
 //小球向右移動(dòng)
 ballObj.x += ballObj.speed;
 if (ballObj.x >= 1300 - ballObj.offsetHeight) {
 ballObj.x = 1300 - ballObj.offsetHeight;
 ballObj.xflag = false;
 }
 } else {
 //小球向左移動(dòng)
 ballObj.x -= ballObj.speed;
 if (ballObj.x <= 0) {
 ballObj.x = 0;
 ballObj.xflag = true;
 }
 }
 crash(ballObj);
 }, 10);
 }
 var x1, y1, x2, y2;
 //碰撞函數(shù)
 function crash(ballObj) {
 //通過(guò)傳過(guò)來(lái)的小球?qū)ο髞?lái)獲取小球的X坐標(biāo)和Y坐標(biāo)
 x1 = ballObj.x;
 y1 = ballObj.y;
 for (var i = 0; i < balls.length; i++) {
 //確保不和自己對(duì)比
 if (ballObj != balls[i]) {
 x2 = balls[i].x;
 y2 = balls[i].y;
 //判斷位置的平方和小球的圓心坐標(biāo)的關(guān)系
 if (Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2) + 800 <= Math.pow(ballObj.offsetWidth + balls[i].offsetWidth, 2)) {
 //判斷傳過(guò)來(lái)的小球?qū)ο螅鄬?duì)于碰撞小球的哪個(gè)方位
 if (ballObj.x < balls[i].x) {
 if (ballObj.y < balls[i].y) {
 //小球?qū)ο笤诒慌鲂∏虻淖笊辖? ballObj.yflag = false;
 ballObj.xflag = false;
 } else if (ballObj.y > balls[i].y) {
 //小球?qū)ο笤诒慌鲂∏虻淖笙陆? ballObj.xflag = false;
 ballObj.yflag = true;
 } else {
 //小球?qū)ο笤诒蛔残∏虻恼蠓? ballObj.xflag = false;
 }
 } else if (ballObj.x > balls[i].x) {
 if (ballObj.y < balls[i].y) {
 //小球?qū)ο笤诒慌鲎残∏虻挠疑戏? ballObj.yflag = false;
 ballObj.xflag = true;
 } else if (ballObj.y > balls[i].y) {
 //小球?qū)ο笤诒慌鲎残∏虻挠蚁路? ballObj.xflag = true;
 ballObj.yflag = true;
 } else {
 //小球?qū)ο笤诒蛔残∏虻恼曳? ballObj.xflag = true;
 }
 } else if (ballObj.y > balls[i].y) {
 //小球?qū)ο笤诒蛔残∏虻恼路? ballObj.yflag = true;
 } else if (ballObj.y < balls[i].y) {
 //小球?qū)ο笤诒蛔残∏虻恼戏? ballObj.yflag = false;
 }
 }
 }
 }
 }
 for (var i = 0; i < balls.length; i++) {
 //將所有的小球傳到函數(shù)中,來(lái)實(shí)現(xiàn)對(duì)小球的移動(dòng)
 moveBalls(balls[i]);
 }
 </script>
</html>

運(yùn)行效果:

更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript運(yùn)動(dòng)效果與技巧匯總》、《JavaScript動(dòng)畫特效與技巧匯總》、《JavaScript圖形繪制技巧總結(jié)》、《JavaScript切換特效與技巧總結(jié)》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》

希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

原生JS實(shí)現(xiàn)多個(gè)小球碰撞反彈效果示例

原生JS實(shí)現(xiàn)多個(gè)小球碰撞反彈效果示例:本文實(shí)例講述了原生JS實(shí)現(xiàn)多個(gè)小球碰撞反彈效果。分享給大家供大家參考,具體如下: 實(shí)現(xiàn)思路:小球的移動(dòng),是通過(guò)改變小球的left和top值來(lái)改變,坐標(biāo)分別為(x,y)當(dāng)x/y值加到最大,即加到父級(jí)的寬度或者高度時(shí),使x值或者y值減小,同理當(dāng)x值或者y值減到最小
推薦度:
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 国产又黄又爽的视频 | 热久久国产欧美一区二区精品 | 欧美 日韩 国产 成人 在线观看 | 中文字幕欧美在线 | 91欧美亚洲 | 国产成人一区二区三区高清 | 国产a区 | 亚洲欧美在线观看一区二区 | 久久成人毛片 | 欧美日韩在线国产 | 国产精品高清一区二区 | 日本一区二区视频在线观看 | 国产精品视频一区二区三区不卡 | 亚洲视频久久 | 日韩欧美精品一区二区三区 | 国产精品久久久久久久久久免费 | 国精产品一区 | 国产精品一页 | 久久一区二区三区四区 | 亚洲国产精品欧美日韩一区二区 | 国产精品伦理久久久久 | 久久亚洲私人国产精品 | 国内视频一区 | 欧美一区二区三区在线观看 | 亚洲国产精品视频 | 日韩区 | 精品国产乱码久久久久久浪潮 | 国产精品免费大片一区二区 | 一区二区三区在线 | 黄色成人在线观看 | 国产成人乱码一区二区三区 | 在线播放国产视频 | 国产一级内谢a级高清毛片 国产最新精品视频 | 亚洲国产精品免费视频 | 久久精品a亚洲国产v高清不卡 | 亚洲欧美日韩综合在线 | 欧美精品在线视频 | 亚洲综合图片小说区热久久 | 欧美一区二区三区视频 | 日本成人一级 | 91视频一区二区 |