描述:撞到目标点弹回来(速度反转)

一、无重力的漂浮div

var div1=document.getElementById("div1");

var iSpeedX=6;

var iSpeedY=8;

setInterval(function(){

var l=div1.offsetLeft+iSpeedX;

var t=div1.offsetTop+iSpeedY;

if(t>=document.documentElement.clientHeight-div1.offsetHeight){

iSpeedY*=-1;          //速度反向

t=document.documentElement.clientHeight-div1.offsetHeight;    //超出下边界时,把它拉回到下边界,不然右边滚动条会闪动出现一下

}

else if(t<=0){

iSpeedY*=-1;

t=0;

}

if(l>=document.documentElement.clientWidth-div1.offsetWidth){

iSpeedX*=-1;

l=document.documentElement.clientWidth-div1.offsetWidthl;

}

else if(l<=0){

iSpeedX*=-1;

l=0;

}

div1.style.left=l+'px';

div1.style.top=t+'px';

},30);

二、碰撞+重力

所谓重力就是Y轴的速度不断增加

setInterval(function(){

iSpeedY+=3;

var l=div1.offsetLeft+iSpeedX;

var t=div1.offsetTop+iSpeedY;

if(t>=document.documentElement.clientHeight-div1.offsetHeight){

iSpeedY*=-0.8;

iSpeedX*=0.8;          //横向速度也要变慢,否则碰到地面时会停不下来

t=document.documentElement.clientHeight-div1.offsetHeight;

}

else if(t<=0){

iSpeedY*=-1;

iSpeedX*=0.8;

t=0;

}

if(l>=document.documentElement.clientWidth-div1.offsetWidth){

iSpeedX*=-0.8;

l=document.documentElement.clientWidth-div1.offsetWidthl;

}

else if(l<=0){

iSpeedX*=-0.8;

l=0;

}

if(Math.abs(iSpeedX)<1){       //解决小数的问题,因为假如速度是小数,正的没问题,100(iSpeed=0.5)-->100.5-->100,负的100(iSpeed=-0.5)--->99.5-->99,可能会出现

x轴反向时滑行

iSpeedX=0;

}

if(Math.abs(iSpeedY)<1){

iSpeedY=0;

}

div1.style.left=l+'px';

div1.style.top=t+'px';

},30);

三、碰撞+重力+拖拽

window.onload=function ()
{
    var oDiv=document.getElementById('div1');  
    var lastX=0;
    var lastY=0;  
    oDiv.onmousedown=function (ev)
    {
        var oEvent=ev||event;     
        var disX=oEvent.clientX-oDiv.offsetLeft;
        var disY=oEvent.clientY-oDiv.offsetTop;    
        document.onmousemove=function (ev)
        {
            var oEvent=ev||event;        
            var l=oEvent.clientX-disX;
            var t=oEvent.clientY-disY;      
            oDiv.style.left=l+'px';
            oDiv.style.top=t+'px';       
            iSpeedX=l-lastX;            //拖拽结束时的速度
            iSpeedY=t-lastY;          
            lastX=l;          //更新上一个点的位置
            lastY=t;        
        };      
        document.onmouseup=function ()
        {
            document.onmousemove=null;
            document.onmouseup=null;         
            startMove();   //拖拽结束时执行
        };       
        clearInterval(timer);
    };
};

var timer=null;
var iSpeedX=0;
var iSpeedY=0;
function startMove()
{
    clearInterval(timer);  
    timer=setInterval(function (){
        var oDiv=document.getElementById('div1');     
        iSpeedY+=3;      
        var l=oDiv.offsetLeft+iSpeedX;
        var t=oDiv.offsetTop+iSpeedY;      
        if(t>=document.documentElement.clientHeight-oDiv.offsetHeight)
        {
            iSpeedY*=-0.8;
            iSpeedX*=0.8;
            t=document.documentElement.clientHeight-oDiv.offsetHeight;
        }
        else if(t<=0)
        {
            iSpeedY*=-1;
            iSpeedX*=0.8;
            t=0;
        }     
        if(l>=document.documentElement.clientWidth-oDiv.offsetWidth)
        {
            iSpeedX*=-0.8;
            l=document.documentElement.clientWidth-oDiv.offsetWidth;
        }
        else if(l<=0)
        {
            iSpeedX*=-0.8;
            l=0;
        }       
        if(Math.abs(iSpeedX)<1)
        {
            iSpeedX=0;
        }       
        if(Math.abs(iSpeedY)<1)
        {
            iSpeedY=0;
        }       
        if(iSpeedX==0 && iSpeedY==0 && t==document.documentElement.clientHeight-oDiv.offsetHeight)
        {
            clearInterval(timer);
        }
        else
        {
            oDiv.style.left=l+'px';
            oDiv.style.top=t+'px';
        }       
        document.title=iSpeedX;
    }, 30);
}

[Js]碰撞运动的更多相关文章

  1. JS运动基础(四) 碰撞运动

    碰撞运动撞到目标点,速度反转无重力的漂浮Div速度反转滚动条闪烁的问题过界后直接拉回来 加入重力反转速度的同时,减小速度纵向碰撞,横向速度也减小横向速度小数问题(负数) <!DOCTYPE HT ...

  2. javascript运动系列第九篇——碰撞运动

    × 目录 [1]碰撞检测 [2]无损碰撞 [3]有损碰撞 前面的话 碰撞可以分为碰壁和互碰两种形式,上篇介绍了碰壁运动,本文将从浅入深地介绍碰撞运动的互碰形式 碰撞检测 对于互碰形式的碰撞运动来说,首 ...

  3. HTML5 Canvas彩色小球碰撞运动特效

    脚本简介 HTML5 Canvas彩色小球碰撞运动特效是一款基于canvas加面向对象制作的运动小球动画特效.   效果展示 http://hovertree.com/texiao/html5/39/ ...

  4. JS缓冲运动案例:右侧居中悬浮窗

    JS缓冲运动案例:右侧居中悬浮窗 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta cha ...

  5. JS缓冲运动案例:右下角悬浮窗

    JS缓冲运动案例:右下角悬浮窗 红色区块模拟页面的右下角浮窗,在页面进行滚动时,浮窗做缓冲运动,最终在页面右下角停留. <!DOCTYPE html> <html lang=&quo ...

  6. js 碰撞 + 重力 运动

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. JS完美运动框架

    这套框架实现了多物体,任意值,链式运动,多值运动,基本满足常见的需求. /* 功能:完美运动框架,可以实现多物体,任意值,链式运动,多值运动 版本:V1.0 兼容性:Chrome,FF,IE8+ (o ...

  8. js缓冲运动

    缓冲运动 现象:逐渐变慢,最后停止 原理:距离越远,速度越大 速度的计算方式: 1,速度由距离决定 2,速度=(目标值-当前值)/缩放系数 说明:速度为正负数时,也决定了物体移动的方向 示例:div缓 ...

  9. 原生js小球运动

    //html代码 <input type="button" value="小球运动" /> <div></div> //js ...

随机推荐

  1. poj3855Blast the Enemy!(多边形重心)

    链接 #include <iostream> #include<cstdio> #include<cstring> #include<algorithm> ...

  2. hdu3007Buried memory(最小圆覆盖)

    链接 普通的暴力复杂度达到O(n^4),对于这题肯定是不行的. 解法:随机增量算法 参考http://www.2cto.com/kf/201208/149602.html algorithm:A.令C ...

  3. poj1971Parallelogram Counting

    链接 越来越感觉到了数学的重要性!.. 这题本来用以斜率和长度为key值进行hash不过感觉很麻烦还TLE了.. 最后知道中点一样的话就可以组成平行四边形,初中数学就可以了.. #include &l ...

  4. 修改jsp文件tomcat发布失败(Could not delete May be locked by another process)

    突然项目修改jsp文件后,tomcat不能发布, Publishing failed with multiple errors   Could not delete D:/Tomcat 6.0/web ...

  5. valueForKeyPath的妙用(转)

    可能大家对 - (id)valueForKeyPath:(NSString *)keyPath 方法不是很了解. 其实这个方法非常的强大,举个例子: NSArray *array = @[@" ...

  6. cpu缓存与多线程

    一.cpu缓存结构 CPU速度远高于内存(即如果只考虑CPU和内存因素,程序的性能常常受到内存访问速度的限制,内存访问和运行),为了协调CPU和内存在速度上的差异,在CPU中增加了高速缓存.和计算机存 ...

  7. iOS开发 UIPanGestureRecognizer手势抽象类

    UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@sel ...

  8. css制作简单的导航栏

    //css代码 #menu{ height: 65px; width:100%; background-color: rgba(0, 0, 0, 0.5);}#menu ul{ list-style: ...

  9. eclipse 新建 maven 项目 步骤(初级入门新手)

    安装 maven(百度) 和在eclipse 中svn(上一篇) 修改 maven 本地仓库 eclipse 属性 maven--> installations-->添加新的 自定义安装的 ...

  10. python 练习 14

    方法一 #!/usr/bin/python # -*- coding: UTF-8 -*- def fib(n): a,b = 1,1 for i in range(n-1): a,b = b,a+b ...