JavaScript拖拽、碰撞、重力及弹性运动实例分析

 更新时间:2016年01月08日 10:37:34   作者:leo列  
这篇文章主要介绍了JavaScript拖拽、碰撞、重力及弹性运动实现方法,涉及JavaScript数学运算结合时间函数实现运动效果的相关技巧,需要的朋友可以参考下

本文实例讲述了JavaScript拖拽、碰撞、重力及弹性运动实现方法。分享给大家供大家参考,具体如下:

js拖拽、碰撞与重力实现代码:

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.title='x:'+iSpeedX+', y:'+iSpeedY;
 };
 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);
  alert('停止');
 }
 else
 {
  oDiv.style.left=l+'px';
  oDiv.style.top=t+'px';
 }
 document.title=iSpeedX;
 }, 30);
}

js弹性运动实现代码:

var left=0; //用left变量存储赋给obj.style.left的值,以防每次系统都省略小数,所导致最后结果的细微差异
var iSpeed=0;
function startMove(obj,iTarget)
{
 clearInterval(obj.timer);
 obj.timer=setInterval(function(){
  iSpeed+=(iTarget-obj.offsetLeft)/5; //速度
  iSpeed*=0.7; //考虑阻力
  left+=iSpeed;
  if(Math.abs(iSpeed)<1&&Math.abs(iTarget-obj.offsetLeft)<1) //停止条件 速度和距离绝对值小于1
  {
   clearInterval(obj.timer);
   obj.style.left=iTarget+"px"; //清楚后,顺便把目标值赋给obj.style.left
  } 
  else
  {
   obj.style.left=left+"px";
  }
 },30);
}

更多关于JavaScript运动效果相关内容可查看本站专题:《JavaScript运动效果与技巧汇总

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

相关文章

  • JS实现时间轴自动播放

    JS实现时间轴自动播放

    这篇文章主要为大家详细介绍了JS实现时间轴自动播放,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • Select标签下拉列表二级联动级联实例代码

    Select标签下拉列表二级联动级联实例代码

    这篇文章主要介绍了Select标签下拉列表二级联动级联实例代码,需要的朋友可以参考下
    2014-02-02
  • Ext JS 实现建议词模糊动态搜索功能

    Ext JS 实现建议词模糊动态搜索功能

    这篇文章主要介绍了Ext JS 实现建议词模糊动态搜索功能,需要的朋友可以参考下
    2017-05-05
  • 认识Knockout及如何使用Knockout绑定上下文

    认识Knockout及如何使用Knockout绑定上下文

    Knockout简称ko,是一个轻量级的javascript类库,采用MVVM设计模式(即Model、view、viewModel),简单优雅的实现了双向绑定,实时更新,帮助您使用干净的数据模型来创建丰富的、响应式的用户界面
    2015-12-12
  • javascript中文本框中输入法切换的问题

    javascript中文本框中输入法切换的问题

    这篇文章主要是对javascript中文本框中输入法切换的问题进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2013-12-12
  • JavaScript数据结构与算法之队列原理与用法实例详解

    JavaScript数据结构与算法之队列原理与用法实例详解

    这篇文章主要介绍了JavaScript数据结构与算法之队列原理与用法,较为详细的说明了队列的概念、原理,并结合实例形式分析了javascript实现与使用队列的相关操作技巧与注意事项,需要的朋友可以参考下
    2017-11-11
  • 关于IE浏览器以及Firefox下的javascript冒泡事件的响应层级

    关于IE浏览器以及Firefox下的javascript冒泡事件的响应层级

    原来是由于IE浏览器以及Firefox对于冒泡型事件的支持层次不同造成的。(如对冒泡事件不是很了解可先查询相关资料)
    2010-10-10
  • javascript中scrollTop详解

    javascript中scrollTop详解

    本文主要给大家介绍了javascript中的scrollTop方法,以及scrollTop在各大浏览器的兼容性情况的详细测试,十分的细致全面,这里推荐给大家,有需要的小伙伴可以参考下。
    2015-04-04
  • uni-app使用swiper实现轮播图的方法

    uni-app使用swiper实现轮播图的方法

    做音乐播放器小程序时,因为swiper的问题耽误不少时间,所以下面这篇文章主要给大家介绍了关于uni-app使用swiper实现轮播图的相关资料,需要的朋友可以参考下
    2022-11-11
  • javascript中this关键字详解

    javascript中this关键字详解

    本文介绍了javascript中this关键字,并将有关this的关键字知识列成一个list,会有助于我们理清思路,是一个很好的学习方法。强烈推荐。
    2016-12-12

最新评论