js 碰撞 + 重力 运动

本文介绍了一个使用HTML和JavaScript实现的碰撞+重力运动效果案例。该案例中,一个红色方块会根据设定的初始速度进行移动,并考虑了空气阻力的影响。当方块与浏览器边界发生碰撞时,其速度会改变方向并减速。
摘要由CSDN通过智能技术生成
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>碰撞+重力运动</title>
    <style>
        #div1
        {
            width:100px;
            height:100px;
            background:red;
            position:absolute;
        }
    </style>
    
    <script type="text/javascript">
        window.onload = function(){
            var oBtn = document.getElementById("btn");
            
            oBtn.onclick = function(){
                move();
            }
        
        }
        
        //碰撞+重力 运动(计算空气阻力)
        var timer = null;
        //横向初速度
        var speedX = 6;
        //竖向初速度速度
        var speedY = 8;
        
        function move(){
            
            clearInterval(timer);
            
            timer = setInterval(function(){
                
                var oDiv = document.getElementById("div1");
                
                //类似重力加速度 : g = 3;
                //竖向加速度:3 
                speedY+=3;
                
                var l = oDiv.offsetLeft + speedX ;
                var t = oDiv.offsetTop + speedY;
                
                if(t >= document.documentElement.clientHeight-oDiv.offsetHeight)
                {
                    //竖向空气阻力
                    speedY*=-0.8;
                    //横向空气阻力
                    speedX*=0.8;
                    //将top设置为(document.documentElement.clientHeight - oDiv.offsetHeight)px
                    t = document.documentElement.clientHeight - oDiv.offsetHeight;
                }
                else if(t<=0)
                {   
                    //竖向空气阻力
                    speedY*=-0.8;
                    //横向空气阻力
                    speedX*=0.8;
                    //将top设置为0px
                    t=0;
                }
                
                if(l>=document.documentElement.clientWidth-oDiv.offsetWidth)
                {  
                    //横向空气阻力
                    speedX*=-0.8;
                    //将left设置为(document.documentElement.clientWidth - oDiv.offsetWidth)px
                    l = document.documentElement.clientWidth - oDiv.offsetWidth;
                }
                else if(l<=0)
                {
                    //横向空气阻力
                    speedX*=-0.8;
                    //将left设置为0px
                    l = 0;
                }
                
                //将横向速度设置为0
                if(Math.abs(speedX)<1)
                {
                    speedX = 0;
                }
                //将竖向速度设置为0
                if(Math.abs(speedY)<1)
                {
                    speedY = 0;
                }
                
                //关闭定时器
                
                //横、竖速度都为空及物体距顶部高度为(可视窗口高度 - 物体高度)
                if(speedX==0 && speedY==0 && t==document.documentElement.clientHeight-oDiv.offsetHeight)
                {
                    clearInterval(timer); 
                }
                else
                {
                    oDiv.style.left = l+'px';
                    oDiv.style.top = t +'px';
                }           
                
            },30);
        }
    </script>
</head>
<body>
   <input type="button" id="btn" value="运动" />
   <div id="div1">
    </div>
    <span style="width:1px;height:300px;background:black;left:300px"></span>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值