国瑞个人博客
首页 > Javascript > js碰撞检测之小球碰撞

js碰撞检测之小球碰撞

js碰撞检测之小球碰撞

 2018年10月03日 作者: 国瑞个人博客 288次浏览

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>
百度已收录

点击快速分享:

以上就是国瑞前端个人博客带来的是《js碰撞检测之小球碰撞》,感谢您的观看!

如果没有特殊的说明,本文即为国瑞前端博客原创(www.huanggr.cn),欢迎读者转载并保留本站版权!https://www.huanggr.cn/642.html

「专业前端博客,如果觉得我的文章对您有用,请帮助本站成长」

赞( 50 ) 打赏

谢谢你请我吃鸡腿*^_^*

支付宝
微信
50

谢谢你请我吃鸡腿*^_^*

支付宝
微信
标签:

上一篇:

下一篇:

相关文章:

共有 1 条评论

  1. 国瑞个人博客
    超级管理员 Windows NT | Chrome 69.0.3497.92

    评论测试

博客简介

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

博主独立研发主题:

本站唯一QQ群

加入国瑞个人博客QQ群

本群为学习探讨群,主要和前端相关,欢迎广大前端(抱有学习目的均可)爱好者加入!广告请勿添加!

升级版本

web前端开发博客,基于vue脚手架制作的前端博客正在制作中,尽情期待,目前示例的代码位于此处

最新版本(尽请期待)-web前端开发博客

精彩评论

本站主要提供服务

二年web前端开发博客,本站专注提供web资源下载,技术问题解答,经验分享,也提供新手的web技术指导,二年前端个人博客,期待你的加入!

站点统计

  • 文章总数: 269 篇
  • 草稿数目: 50 篇
  • 分类数目: 26 个
  • 页面总数: 16 个
  • 评论总数: 216 条
  • 链接总数: 10 个
  • 标签总数: 104 个
  • 建站时间: 803 天
  • 注册用户: 659 人
  • 访问总量: 8780695 次
  • 最近更新: 2019年7月15日
-->