zoukankan      html  css  js  c++  java
  • 【JavaScript】动画-小案例:小球运动

    最近的讲js运动框架时,做了一个小案例,随机生成几个小球,然后让他们在页面中跳动,碰到边界就弹回来并修改颜色。效果如下:

    代码如下:

     1 <!doctype html>
     2 <html>
     3 
     4 <head>
     5     <meta charset="utf-8">
     6     <meta name="Keywords" content="28-JS作业小球运动">
     7     <meta name="Description" content="28-JS小球运动">
     8     <title>JS-小球运动</title>
     9     <style>
    10         .ball {
    11             position: absolute;
    12             top: 0;
    13             left: 0;
    14             width: 100px;
    15             height: 100px;
    16             background: radial-gradient(circle, #fff, #fff600);
    17             border-radius: 50%;
    18         }
    19     </style>
    20 </head>
    21 
    22 <body>
    23     <!-- <div class="ball"></div> -->
    24     <script>
    25 
    26         // 创建[1,11)个小球
    27         var mdAttr = document.createDocumentFragment();
    28         var OBall = [];//小球对象数组
    29         for (var i = 0; i < random(5,20); i++) {
    30             OBall[i] = document.createElement("div");
    31             OBall[i].setAttribute("class", "ball");
    32 
    33             var cirR = random(30,50);//小球半径
    34             OBall[i].style.width = cirR * 2 + "px";
    35             OBall[i].style.height = cirR * 2 + "px";
    36             OBall[i].style.background = "radial-gradient(circle," + randomColor() + "," + randomColor() + ")";
    37             mdAttr.appendChild(OBall[i]);
    38 
    39             OBall[i].startX = random(1,10);//初始位置X
    40             OBall[i].startY = random(1,10);//初始位置Y
    41             OBall[i].Vx = random(3,10);//水平增加距离
    42             OBall[i].Vy = random(3,10);//垂直增加距离
    43         }
    44         document.body.appendChild(mdAttr);
    45 
    46         //获取浏览器窗口宽高
    47         var W,H;
    48         window.onresize = (function(){
    49             W = window.innerWidth,
    50             H = window.innerHeight;
    51         })();
    52 
    53         //运动
    54         ~function fn() {
    55             OBall.forEach(function (ball) {
    56                 var MaxH = H - ball.offsetHeight,//获取小球位置的最大值,以免超过边界
    57                     MaxW = W - ball.offsetWidth;
    58                 ball.startX += ball.Vx;//改变小球位置
    59                 ball.startY += ball.Vy;
    60                 if(ball.startX >= MaxW || ball.startX <=0){//若小球位置超出最大值和最小值就改变方向
    61                     ball.Vx *= -1;
    62                     ball.style.background = "radial-gradient(circle," + randomColor() + "," + randomColor() + ")";
    63                     ball.startX = Math.max(0,ball.startX);
    64                     ball.startX = Math.min(ball.startX,MaxW);
    65                 }
    66                 if(ball.startY >= MaxH || ball.startY <=0){
    67                     ball.Vy *= -1;
    68                     ball.style.background = "radial-gradient(circle," + randomColor() + "," + randomColor() + ")";
    69                     ball.startY = Math.max(0,ball.startY);
    70                     ball.startY = Math.min(ball.startY,MaxW);
    71                 }
    72                 ball.style.left = ball.startX + "px";//设置小球当前位置
    73                 ball.style.top = ball.startY + "px";
    74 
    75             });
    76             requestAnimationFrame(fn);//循环
    77         }();
    78 
    79         //颜色随机
    80         function randomColor() {
    81             var r = Math.floor(Math.random() * 256),
    82                 g = Math.floor(Math.random() * 256),
    83                 b = Math.floor(Math.random() * 256);
    84             return "rgb(" + r + "," + g + "," + b + ")";
    85         }
    86         //取[min,max)之间的随机值
    87         function random(min,max){
    88             return Math.random(max-min)+min;
    89         }
    90     </script>
    91 </body>
    92 
    93 </html>
  • 相关阅读:
    三分钟了解Activity工作流
    从sum()求和引发的思考
    关于JS事件的几点总结
    JS学习:第二周——NO.4DOM库
    JS心得——判断一个对象是否为空
    JS学习:第二周——NO.3盒子模型
    JS学习:第二周——NO.2正则
    &&&&数组去重方法总结&&&&&
    JS学习:第二周——NO.1回调函数
    JS学习:第一周——NO.4继承
  • 原文地址:https://www.cnblogs.com/qiuyueding/p/8108692.html
Copyright © 2011-2022 走看看