zoukankan      html  css  js  c++  java
  • js 拖拽 碰撞 + 重力 运动

    <!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 oDiv = document.getElementById("div1");
                
                var lastX = 0;
                var lastY =0;
                
                oDiv.onmousedown = function(ev){
                    
                    var en = ev || event;
                    
                    
                    var disX = en.clientX - oDiv.offsetLeft;
                    var disY = en.clientY - oDiv.offsetTop;
                    
                    document.onmousemove = function(ev){
                        var e = ev || event;
                        var l = e.clientX - disX;
                        var t = e.clientY - disY;
                        
                        oDiv.style.left = l +'px';
                        oDiv.style.top = t + 'px';
                        
                        
                        speedX = l - lastX;
                        speedY = t - lastY;
                    }
                    
                    
                   document.onmouseup = function(){
                        document.onmousemove = null;
                        document.onmouseup = null;
                        //开始运动
                        move();
                         
                   }
                   //关闭定时器
                   clearInterval(timer);
                    
                }
            
            }
            
        
             //碰撞+重力 运动(计算空气阻力)
            var timer = null;
            //横向初速度
            var speedX = 0;
            //竖向初速度速度
            var speedY = 0;
            
            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>
      
       <div id="div1">
        </div>
        <span style="1px;height:300px;background:black;left:300px"></span>
    </body>
    </html>
  • 相关阅读:
    链队列的初始化,建立,插入,查找,删除。
    顺序队列的初始化,建立,插入,查找,删除。
    顺序栈的初始化,建立,插入,查找,删除。
    双链表的初始化,建立,插入,查找,删除。
    MT6737 Android N 平台 Audio系统学习----录音到播放录音流程分析
    内核Alsa之pcm
    platform_set_drvdata 和 platform_get_drvdata
    linux 中mmap的用法
    src源dst目标
    复旦软件工程专业课
  • 原文地址:https://www.cnblogs.com/zoro-zero/p/4341805.html
Copyright © 2011-2022 走看看