js实现div的碰壁反弹效果

需求: 写一个div,让div在父级进行匀速运动,碰到父级上下左右的边框,就向反方向运动。

碰壁反弹在游戏制作中很常用~~~~

<style>
    .wrap {
        width: 1000px;height: 500px;
        border: 1px solid red;
        margin: 40px auto;
        position: relative;
        box-sizing: border-box;

    }
    .box {
        width: 100px;height: 100px;
        background-color: green;
        position: absolute;
        top: 100px;left: 200px;
        /* border: 1px solid red; */
    /* 因为父元素有border,所以,可以给子元素也加一个边框,更好的解决方式是给父元素加box-sizing: border-box;总之就是算的时候宽高符合就行了*/
} </style>
<body>
    <div class="wrap">
        <div class="box"></div>
    </div>

<script>
    // 获取元素
    var wrap = document.getElementsByTagName("div")[0];
    var box = document.getElementsByTagName("div")[1]; 

    //让元素动起来
    // 添加两个变量,用于更换运动方向
    var a = 1;
    var b = 1;
    // 获取元素的可运动空间,用父元素的宽高减去子元素的宽高
    var w = wrap.offsetWidth - box.offsetWidth;
    var h = wrap.offsetHeight - box.offsetHeight;

    // console.log(w,h);
    
    setInterval(function(){
        // 获取元素当前left
        var  l  = box.offsetLeft;
        if(l == w || l == 0){
            // 如果到达可运动空间最大值和最小值的时候,a 变成负值
            a *= -1;
        }
        // 把元素距离左边的值每10ms加1px
        // a变成负值可以改变运动方向
        box.style.left = l + a + "px";

        // 垂直方向同水平方向
        var t = box.offsetTop;
        if(t == h || t == 0){
            b *= -1;
        }
        box.style.top = t + b + "px";
    },10); 

</script>
</body>

 

转载于:https://www.cnblogs.com/sandraryan/p/11377552.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值