国瑞前端
当前位置: Javascript > 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>

「梦想一旦被付诸行动,就会变得神圣,如果觉得我的文章对您有用,请帮助本站成长」

赞(50) 打赏

支付宝扫一扫打赏

微信扫一扫打赏

标签:

上一篇:

下一篇:

相关推荐

1 条评论关于"js碰撞检测之小球碰撞"

最新评论

  1. 超级管理员
    Windows 10 Chrome 69.0.3497.92

    评论测试

  2. 暂无留言哦~~

博客简介

国瑞个人博客: https://www.huanggr.cn/,我们关注Web前端开发技术,web前端开发,移动前端开发,前端资讯,同时分享前端资源和工具等,期待你的参与,了解更多..

博主独立研发主题:

广告

广告

广告

广告

精彩评论

广告

站点统计

  • 文章总数: 334 篇
  • 草稿数目: 86 篇
  • 分类数目: 28 个
  • 独立页面: 5 个
  • 评论总数: 108 条
  • 链接总数: 10 个
  • 标签总数: 111 个
  • 注册用户: 176 人
  • 访问总量: 8,677,393 次
  • 最近更新: 2021年7月21日
服务热线:
 

 QQ在线交流

 旺旺在线