全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

JS碰撞运动实现方法详解

本文实例分析了JS碰撞运动实现方法。分享给大家供大家参考,具体如下:

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

一、无重力的漂浮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);
}

更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript运动效果与技巧汇总》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript动画特效与技巧汇总》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。


# JS  # 碰撞  # 运动  # 原生JS实现多个小球碰撞反弹效果示例  # JS实现简单的浮动碰撞效果示例  # JS实现小球的弹性碰撞效果  # javascript实现10个球随机运动、碰撞实例详解  # js实现div色块碰撞  # 拖拽  # 结束时  # 相关内容  # 也要  # 遍历  # 把它  # 感兴趣  # 数据结构  # 给大家  # 更多关于  # 撞到  # 所述  # 程序设计  # 变慢  # 滚动条  # lt  # documentElement  # clientHeight  # offsetHeight  # left 


相关文章: 宁波免费建站如何选择可靠模板与平台?  高防服务器租用首荐平台,企业级优惠套餐快速部署  建站之星安装失败:服务器环境不兼容?  枣阳网站制作,阳新火车站打的到仙岛湖多少钱?  无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?  建站主机选购指南与交易推荐:核心配置解析  Python文件管理规范_工程实践说明【指导】  网站建设设计制作营销公司南阳,如何策划设计和建设网站?  如何在Golang中使用replace替换模块_指定本地或远程路径  用v-html解决Vue.js渲染中html标签不被解析的问题  高防服务器租用如何选择配置与防御等级?  网站代码制作软件有哪些,如何生成自己网站的代码?  南平网站制作公司,2025年南平市事业单位报名时间?  开心动漫网站制作软件下载,十分开心动画为何停播?  图册素材网站设计制作软件,图册的导出方式有几种?  黑客入侵网站服务器的常见手法有哪些?  定制建站流程步骤详解:一站式方案设计与开发指南  家庭服务器如何搭建个人网站?  制作网站公司那家好,网络公司是做什么的?  如何在IIS中新建站点并配置端口与IP地址?  如何通过NAT技术实现内网高效建站?  建站主机SSH密钥生成步骤及常见问题解答?  如何在Golang中引入测试模块_Golang测试包导入与使用实践  学校建站服务器如何选型才能满足性能需求?  智能起名网站制作软件有哪些,制作logo的软件?  Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递  网站制作价目表怎么做,珍爱网婚介费用多少?  宝塔建站无法访问?如何排查配置与端口问题?  陕西网站制作公司有哪些,陕西凌云电器有限公司官网?  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  html制作网站的步骤有哪些,iapp如何添加网页?  电脑免费海报制作网站推荐,招聘海报哪个网站多?  建站主机与服务器功能差异如何区分?  微网站制作教程,我微信里的网站怎么才能复制到浏览器里?  文字头像制作网站推荐软件,醒图能自动配文字吗?  网站制作需要会哪些技术,建立一个网站要花费多少?  如何通过西部建站助手安装IIS服务器?  相册网站制作软件,图片上的网址怎么复制?  建站主机核心功能解析:服务器选择与网站搭建流程指南  php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】  网站制作网站,深圳做网站哪家比较好?  如何在云指建站中生成FTP站点?  小说建站VPS选用指南:性能对比、配置优化与建站方案解析  制作公司内部网站有哪些,内网如何建网站?  代刷网站制作软件,别人代刷火车票靠谱吗?  C++如何将C风格字符串(char*)转换为std::string?(代码示例)  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  常州自助建站:操作简便模板丰富,企业个人快速搭建网站  北京企业网站设计制作公司,北京铁路集团官方网站?  小型网站制作HTML,*游戏网站怎么搭建? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。