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

一、无重力的漂浮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. Nginx入门笔记之————配置文件结构

    在nginx.conf的注释符号位# nginx文件的结构,这个对刚入门的同学,可以多看两眼. 默认的config: #user nobody; worker_processes ; #error_l ...

  2. VB6.0

    1. 安装包来自 http://msdn.itellyou.cn/ 下载的文件为: sc_vb6_ent_cd1.iso sc_vb6_ent_cd2.iso 2.安装时,"请输入产品的 I ...

  3. HDU5829 NTT

    以下这份代码并没有过.但感觉没有问题.不是蜜汁WA就是蜜汁T. #include <cstdio> #include <iostream> #include <cstri ...

  4. cheat-linux命令行实用助记工具

    cheat究竟用来干嘛? 我们虽然能够使用man和--help来帮助我们查看命令使用方式,但是很多工程师都觉得,他们显然还不够man! 看看cheat是怎么man的 当我敲下cheat tar的时候, ...

  5. C/C++中static关键字作用总结

    来来来,来看这篇文章: http://www.cnblogs.com/biyeymyhjob/archive/2012/07/19/2598815.html 总结一下: 1.先来介绍它的第一条也是最重 ...

  6. android下基本json串的生成与解析

    以前就用过json串,不过是在java环境下面,如今转移到android环境下,java里面生成解析json串的jar包与android中自带的冲突,所以也只能用安卓自带的.   先前查网上的资料,感 ...

  7. redis web 客户端工具 redis-admin

    redis-admin是基于java的redis web客户端(redis client),以方便广大程序员使用redis为宗旨,集五种数据结构增删改查于一身. https://github.com/ ...

  8. Spring Boot修改内置Tomcat端口号 (zhuan)

    http://blog.csdn.net/argel_lj/article/details/49851625 ********************************************* ...

  9. DRUID连接池的实用 配置详解

    DRUID介绍 DRUID是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0.DBCP.PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,可以说是针 ...

  10. 应用 Middleware

    主要应用场景:过滤HTTP请求 laravel本身自带了几个Middleware在app/http/middleware目录下面 然后在app/http/kernel.php中注册 自定义一个midd ...