• javaScript 实现追击动画碰撞


    原理就是用setTimeout 方法,很久之前写的代码了, 今天发现了,上传上来保存下。

    效果是两个方块在一条直线上进行互相追击,速度快的碰撞到速度慢的就会减速,而被碰撞的就会加速。二者互相追击,碰撞。 

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
    
        #container {
            position: relative;
            margin: 120px auto;
             800px;
            height: 40px;
            border: 1px solid red;
            box-sizing: border-box;
            color: #fff;
        }
    
        #box {
            position: absolute;
             40px;
            height: 40px;
            background-color: #47acab;
            text-align: center;
            box-sizing: border-box;
        }
    
        #box2 {
            position: absolute;
             40px;
            height: 40px;
            background-color: darkslateblue;
            text-align: center;
            box-sizing: border-box;
        }
    </style>
    <body>
    <div id="container">
        <div id="box" style="left: 100px">box</div>
    
        <div id="box2" style="left: 180px">box2</div>
    </div>
    <script>
        (function () {
            var width = 800;
            var boxWidth = 40;
            var box = document.getElementById('box');
            var box2 = document.getElementById('box2');
    
            function play(step, time, div) {
                var obj = {};
                obj.step = step;
                obj.time = time;
                obj.box = div;
                obj.pos = 0;
                /* 因为是靠left增加来移动方格,所以加方格的一个宽度,防止方移动到末尾后超出一个身位置*/
                obj.go = function () {
                    if (parseInt(obj.box.style.left) + boxWidth >= (width)) {
                        obj.box.style.left = obj.pos + 'px';
                    }
                    obj.box.style.left = parseInt(obj.box.style.left) + obj.step + 'px';
                    setTimeout(obj.go, obj.time)
                }
                return obj;
            }
    
            function create() {
                var a = play(1, 20, box);
                var b = play(1, 2, box2);
                a.go();
                b.go();
                check();
                a_check()
                var b_count = 0;
                var a_count = 0;
                var fast = 2;
    
                function check() {
                    if (Math.round(parseInt(b.box.style.left)) == Math.round(parseInt(a.box.style.left)) - boxWidth && a.time > b.time) {
                        b.time = b.time * 2;
                        a.time = a.time / 2;
                        a.box.style.left = parseInt(a.box.style.left) + fast + 'px';
    
                        console.log("b碰撞次数: " + ++b_count);
                    }
                    setTimeout(check, b.time);
                }
    
                function a_check() {
                    if (Math.round(parseInt(a.box.style.left)) == Math.round(parseInt(b.box.style.left)) - boxWidth && b.time > a.time) {
                        a.time = a.time * 2;
                        b.time = b.time / 2;
    
                        b.box.style.left = parseInt(b.box.style.left) + parseInt(b.box.style.left) / 3 + 'px';
                        console.log("a碰撞次数: " + ++a_count + Math.round(parseInt(a.box.style.left)));
    
                    }
                    setTimeout(a_check, a.time);
                }
            }
    
            create();
        })()
    </script>
    </body>
    </html>
    

      

    您可以点击   这里查看demo

  • 相关阅读:
    Day17_购物车
    Kali小技巧
    sqlserver误删数据库表恢复记录
    JS轮流播放视频和图片
    .net core使用ocelot---第八篇 Consul
    .net core使用ocelot---第七篇 服务发现
    .net core使用ocelot---第六篇 负载均衡
    .net core使用ocelot---第五篇 服务质量
    .net core使用ocelot---第四篇 限流熔断
    .net core使用ocelot---第三篇 日志记录
  • 原文地址:https://www.cnblogs.com/wxhhts/p/10590575.html
Copyright © 2020-2023  润新知