用永生js实现小球在规定范围内随机移动、随机颜色、保留移动轨迹

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>随机运动、颜色的小球</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        .app {
            width: 700px;
            height: 400px;
            background-color: skyblue;
            position: relative;
            margin: auto;
        }

        .ball {
            width: 20px;
            height: 20px;
            background-color: tomato;
            border-radius: 50%;
            position: absolute;
        }

        #btn {
            width: 60px;
            height: 30px;
            position: absolute;
            left: 50%;
            margin-left: -350px;
        }
    </style>
</head>

<body>
    <!-- 逻辑思维 -->
    <!-- 1、创建一个父盒子  父盒子设置相对定位、宽高、背景色 -->
    <!-- 2、在父盒子中动态添加子盒子  子盒子设置绝对定位、宽高、随机背景色、随即出现的位置以及保留上一个移动坐标  -->
    <!-- 3、准备一个按钮,点击按钮在父盒子中添加子盒子 -->
    <!--  -->

    <!-- 准备父盒子 并设置好样式以及准备好子盒子的样式-->
    <div class="app">

        <!-- <div class="ball"></div> -->
    </div>
    <button id="btn">Run</button>




    <script>
        // 1、获取元素
        var app = document.querySelector(‘.app‘);
        var btn = document.getElementById(‘btn‘)
        // 2、点击按钮添加小球
        btn.onclick = () => {
            // 检测btn是否生效
            // alert(‘skja‘)
            // 封装一个随机函数方便调用
            function ran(max, min) {
                return Math.floor(Math.random() * (max - min + 1)) + min;
            }

            // 因为需要颜色随机生成,所以使用封装搞得随机函数完成
            function getRandomColor() {
                var c1 = ran(0, 255);
                var c2 = ran(0, 255);
                var c3 = ran(0, 255);
                return ‘rgb(‘ + c1 + ‘,‘ + c2 + ‘,‘ + c3 + ‘)‘
            }

            function vv() {
                // 因为是随机出现的,所以使用封装好的随机函数
                var x = ran(0, 680);
                var y = ran(0, 380)
                //    向x、y轴移动距离
                var xDis = 10;
                var yDis = 10
                setInterval(() => {

                    // 在定时器内创建小球并将准备好的样式赋给它
                    var ball = document.createElement(‘div‘)
                    ball.className = ‘ball‘


                    var maxWidth = 680 - ball.offsetWidth,
                        maxHeight = 380 - ball.offsetHeight
                        // 向x、y轴移动距离范围
                    x += ran(xDis, 0);
                    y += ran(yDis, 0);
                    // 在x轴正方向(左=>右)上运动超出所允许的最大范围时移动范围变为负值与 X 相加,避免超出
                    if (x >= maxWidth) {
                        x = maxWidth;
                        xDis = -xDis
                    }
                    // 在x轴反方向(右=>左)上运动超出所允许的最大范围时移动范围变为负值与 X 相加,避免超出
                    if (x <= 0) {
                        x = 0
                        xDis = -xDis
                    }
                    // 在y轴反方向(上=>下)上运动超出所允许的最大范围时移动范围变为负值与 Y 相加,避免超出
                    if (y >= maxHeight) {
                        y = maxHeight;
                        yDis = -yDis
                    }
                    // 在y轴反方向(下=>上)上运动超出所允许的最大范围时移动范围变为负值与 Y 相加,避免超出
                    if (y <= 0) {
                        y = 0;
                        yDis = -yDis;
                    }
                    // 将得到的想x,y值赋给如下
                    ball.style.left = x + ‘px‘;
                    ball.style.top = y + ‘px‘
                    // 调用随机颜色变化
                    ball.style.backgroundColor = getRandomColor();
                    // 追加到指定位置
                    app.appendChild(ball)
                }, 10)
            }
            vv() //一定要记得自调用
        }
    </script>

</body>

</html>

用永生js实现小球在规定范围内随机移动、随机颜色、保留移动轨迹

上一篇:Enterprise OAuth 2.0 - Enterprise and Social Media Application Landscape


下一篇:Python3 Scrapy爬虫框架-使用CrawlSpider