js碰撞检测之小球碰撞

js中可以操作DOM,用来实现各种炫酷的效果,接下来为大家介绍一下利用js来实现小球碰撞,当效果碰到屏幕的边缘的时候就会实现反弹,然后变色,然后循环往复,接下来我们就来解析一波小球…

js中可以操作DOM,用来实现各种炫酷的效果,接下来为大家介绍一下利用js来实现小球碰撞,当效果碰到屏幕的边缘的时候就会实现反弹,然后变色,然后循环往复,接下来我们就来解析一波小球碰撞的原理吧

js碰撞检测之小球碰撞

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="Author" content="爱前端博客">
    <title>爱前端博客</title>
    <style>
        *{margin:0;padding:0;font-family: Microsoft YaHei,serif;}
        li{list-style: none;}
        .ball{
            position: absolute;
            top:0;
            left:0;
            width: 100px;
            height: 100px;
            background: pink;
            border-radius:50%;
        }
    </style>
</head>
<body>

<script>
    play(10);

    function play(num) {
        //生成num个div
        for(var i=0;i<num;i++){
            var Div = document.createElement("div");
                Div.className = "ball";
                Div.leftVal = 3+i;  //预存每个球的初始速度
                Div.topVal = 3+i;//预存每个球的初始速度
                Div.style.backgroundColor = randomC();

            document.body.appendChild(Div);
        }

        var aBall = document.querySelectorAll(".ball");
            maxTop = document.documentElement.clientHeight - aBall[0].clientHeight,//获取top的最大值
            maxLeft = document.documentElement.clientWidth - aBall[0].clientWidth;//获取left的最大值



        window.onresize = function () {
            maxTop = document.documentElement.clientHeight - aBall[0].clientHeight;//获取top的最大值
            maxLeft = document.documentElement.clientWidth - aBall[0].clientWidth;//
        };



        auto();
        function auto() {
            for(var i=0;i<num;i++){
                var Ball = aBall[i],
                    startL = Ball.offsetLeft,   //取每个球的初始left和TOP值
                    startT = Ball.offsetTop,    //取每个球的初始left和TOP值
                    Left = startL + Ball.leftVal,   //改变,每个球的left和top值
                    Top = startT + Ball.topVal; //改变,每个球的left和top值


                if(Left >= maxLeft || Left <= 0){
                    Left = Math.min(Left,maxLeft);//限制Left的最大值
                    Left = Math.max(Left,0);//限制最小值

                    Ball.leftVal = -Ball.leftVal;
                    Ball.style.backgroundColor = randomC();

                }
                if(Top >= maxTop || Top <= 0){
                    Ball.topVal = -Ball.topVal;

                    Top = Math.min(Top,maxTop);//限制Left的最大值
                    Top = Math.max(Top,0);//限制最小值
                    Ball.style.backgroundColor = randomC();
                }


                Ball.style.top = Top + "px";
                Ball.style.left = Left + "px";
            }
            requestAnimationFrame(auto)

        }
        // rgb(0-255)
        function randomC() {
            var r = Math.floor(Math.random()*256),
                g = Math.floor(Math.random()*256),
                b = Math.floor(Math.random()*256);
            return "rgb("+r+","+g+","+b+")";
        }

    }

</script>
</body>
</html>

作者: huanggr

为您推荐

发表评论

电子邮件地址不会被公开。 必填项已用*标注

评论列表 1人参与