<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題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關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        原生JS實現多個小球碰撞反彈效果示例

        來源:懂視網 責編:小采 時間:2020-11-27 22:20:37
        文檔

        原生JS實現多個小球碰撞反彈效果示例

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

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

        實現思路:小球的移動,是通過改變小球的left和top值來改變,坐標分別為(x,y)當x/y值加到最大,即加到父級的寬度或者高度時,使x值或者y值減小,同理當x值或者y值減到最小時,同樣的使x值或者y值增加,以上的思路可以實現小球的碰壁反彈

        小球與小球之間的碰撞,要判斷小球在被撞小球的哪個方向,從而判斷小球該向哪個方向移動,同樣的改變小球的坐標值,來實現小球的反彈

        實現代碼:

        <!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;
         /*小球設置相對定位*/
         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">
         /**
         * 生成并返回一個從m到n全區間的隨機數
         * @param {Object} m
         * @param {Object} n
         */
         function randomNum(m, n) {
         return Math.floor(Math.random() * (n - m + 1) + m);
         }
         /**
         * 生成一個隨機顏色,并返回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");
         //定義數組存儲所有的小球
         var balls = [];
         //生成小球函數
         function createBalls() {
         for (var i = 0; i < 20; i++) {
         var ball = document.createElement("p");
         //隨機小球起始的X坐標和小球的Y坐標
         ball.x = randomNum(0, 1200);
         ball.y = randomNum(0, 700);
         //隨機小球的移動速度
         ball.speed = randomNum(2, 5);
         //隨機小球移動的方向
         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;
         }
         //隨機小球的背景顏色
         ball.style.backgroundColor = randomColor();
         ball.innerHTML = i + 1;
         //將小球插入當wrapDiv中
         wrapDiv.appendChild(ball);
         //將所有的小球存儲到數組中
         balls.push(ball);
         }
         }
         createBalls();
         //小球移動函數,判斷小球的位置
         function moveBalls(ballObj) {
         setInterval(function() {
         ballObj.style.top = ballObj.y + "px";
         ballObj.style.left = ballObj.x + "px";
         //判斷小球的標志量,對小球作出相應操作
         if (ballObj.yflag) {
         //小球向下移動
         ballObj.y += ballObj.speed;
         if (ballObj.y >= 800 - ballObj.offsetWidth) {
         ballObj.y = 800 - ballObj.offsetWidth;
         ballObj.yflag = false;
         }
         } else {
         //小球向上移動
         ballObj.y -= ballObj.speed;
         if (ballObj.y <= 0) {
         ballObj.y = 0;
         ballObj.yflag = true;
         }
         }
         if (ballObj.xflag) {
         //小球向右移動
         ballObj.x += ballObj.speed;
         if (ballObj.x >= 1300 - ballObj.offsetHeight) {
         ballObj.x = 1300 - ballObj.offsetHeight;
         ballObj.xflag = false;
         }
         } else {
         //小球向左移動
         ballObj.x -= ballObj.speed;
         if (ballObj.x <= 0) {
         ballObj.x = 0;
         ballObj.xflag = true;
         }
         }
         crash(ballObj);
         }, 10);
         }
         var x1, y1, x2, y2;
         //碰撞函數
         function crash(ballObj) {
         //通過傳過來的小球對象來獲取小球的X坐標和Y坐標
         x1 = ballObj.x;
         y1 = ballObj.y;
         for (var i = 0; i < balls.length; i++) {
         //確保不和自己對比
         if (ballObj != balls[i]) {
         x2 = balls[i].x;
         y2 = balls[i].y;
         //判斷位置的平方和小球的圓心坐標的關系
         if (Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2) + 800 <= Math.pow(ballObj.offsetWidth + balls[i].offsetWidth, 2)) {
         //判斷傳過來的小球對象,相對于碰撞小球的哪個方位
         if (ballObj.x < balls[i].x) {
         if (ballObj.y < balls[i].y) {
         //小球對象在被碰小球的左上角
         ballObj.yflag = false;
         ballObj.xflag = false;
         } else if (ballObj.y > balls[i].y) {
         //小球對象在被碰小球的左下角
         ballObj.xflag = false;
         ballObj.yflag = true;
         } else {
         //小球對象在被撞小球的正左方
         ballObj.xflag = false;
         }
         } else if (ballObj.x > balls[i].x) {
         if (ballObj.y < balls[i].y) {
         //小球對象在被碰撞小球的右上方
         ballObj.yflag = false;
         ballObj.xflag = true;
         } else if (ballObj.y > balls[i].y) {
         //小球對象在被碰撞小球的右下方
         ballObj.xflag = true;
         ballObj.yflag = true;
         } else {
         //小球對象在被撞小球的正右方
         ballObj.xflag = true;
         }
         } else if (ballObj.y > balls[i].y) {
         //小球對象在被撞小球的正下方
         ballObj.yflag = true;
         } else if (ballObj.y < balls[i].y) {
         //小球對象在被撞小球的正上方
         ballObj.yflag = false;
         }
         }
         }
         }
         }
         for (var i = 0; i < balls.length; i++) {
         //將所有的小球傳到函數中,來實現對小球的移動
         moveBalls(balls[i]);
         }
         </script>
        </html>
        
        

        運行效果:

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

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

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        原生JS實現多個小球碰撞反彈效果示例

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

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲香蕉免费有线视频| 黄桃AV无码免费一区二区三区| 日本免费人成网ww555在线| 免费a级毛片无码av| 精品女同一区二区三区免费播放| 国产高清免费在线| 美女的胸又黄又www网站免费| 免费国产va在线观看| 免费一级毛片正在播放| 一个人看的www免费高清| 国产av无码专区亚洲国产精品| 国产成人无码精品久久久久免费| 91九色视频无限观看免费| 亚洲精品国产福利在线观看| 免费不卡视频一卡二卡| 亚洲色www永久网站| 日本黄色免费观看| 一级黄色片免费观看| 亚洲中文字幕久久精品无码APP| 免费国产成人18在线观看| 亚洲视频免费一区| 毛片免费视频播放| 成年女人喷潮毛片免费播放| 亚洲精品伦理熟女国产一区二区| 日韩在线不卡免费视频一区| 亚洲人成网网址在线看| 国产精品久久久久影院免费| a级毛片无码免费真人久久| 亚洲图片中文字幕| 亚洲国产成人久久精品99| a级毛片视频免费观看| 国产午夜亚洲精品| 精品国产人成亚洲区| 美女的胸又黄又www网站免费| 亚洲中文字幕第一页在线| 男女免费观看在线爽爽爽视频| 春意影院午夜爽爽爽免费| 亚洲精品无码久久久久久久| 日本二区免费一片黄2019| 男人的天堂网免费网站| 亚洲中文字幕无码中文字|