碰壁反弹

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>碰壁反弹</title>
    <style type="text/css">
        * {
            margin: 0;
            padding: 0;
        }

        .wp {
            width: 1000px;
            height: 600px;
            position: relative;
            margin: 10px auto 0;
            border: 1px #f00 solid;
        }

        #ball {
            width: 40px;
            height: 40px;
            border-radius: 50%;
            background: #04BE02;
            position: absolute;
        }
    </style>
</head>

<body>
    <div class="wp">
        <div id="ball"></div>
    </div>
</body>

</html>
<script type="text/javascript">
    function rand(m, n) {
        return Math.floor(Math.random() * (n - m + 1) + m);
    }
    var ball = document.getElementById("ball");
    //设置小球的出现位置,水平方向最大960,垂直方向最大560
    var l = rand(0, 960);
    var t = rand(0, 560);
    ball.style.left = l + 'px';
    ball.style.top = t + 'px';

    /*
    碰壁反弹,实质上就是根据left和top临界值,设置改变方向,再结合计时器进行操作
    */
    var timmer;
    var xDur = true; //球向右移动
    var yDur = true; //球向下移动
    /*
    思路: 使用 xDur 和 yDur 来确定小球在x轴和y轴移动的方向,使用l和t来设置小球的left和top值,只有小球到达临界值的时候, 才会改变方向,改变方向就是改变 xDur 和 yDur的布尔值
    */
    timmer = setInterval(function () {
        // 判断x轴方向
        if (l >= 960) {
            xDur = false;
        }
        if (l <= 0) {
            xDur = true;
        }

        // 判断y轴方向
        if (t >= 560) {
            yDur = false;
        }
        if (t <= 0) {
            yDur = true;
        }

        xDur ? l++ : l--;
        yDur ? t++ : t--;

        /* 
        // 向右运动
        if(xDur){
            l++;
        }
        // 向左运动
        if(!xDur){
                  l--;
        }
        // 向下运动
        if(yDur){
                 t++;
        }
        // 向上运动
        if(!yDur){
           t--;
        } */
        ball.style.left = l + 'px';
        ball.style.top = t + 'px';
    }, 10);

</script>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值