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


Posted in Javascript onJanuary 08, 2016

本文实例讲述了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程序设计有所帮助。

Javascript 相关文章推荐
基于JQuery框架的AJAX实例代码
Nov 03 Javascript
ASP.NET jQuery 实例7 通过jQuery来获取DropDownList的Text/Value属性值
Feb 03 Javascript
js日期联动示例
May 02 Javascript
Firefox下无法正常显示年份的解决方法
Sep 04 Javascript
使用Javascript简单实现图片无缝滚动
Dec 05 Javascript
js实现DOM走马灯特效的方法
Jan 21 Javascript
基于vue2的table分页组件实现方法
Mar 20 Javascript
微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(二)
May 11 Javascript
了解Javascript中函数作为对象的魅力
Jun 19 Javascript
简单了解微信小程序 e.target与e.currentTarget的不同
Sep 27 Javascript
微信小程序实现签到弹窗动画
Sep 21 Javascript
在HTML5 localStorage中存储对象的示例代码
Apr 21 Javascript
jQuery实现本地预览上传图片功能
Jan 08 #Javascript
jQuery自定义滚动条完整实例
Jan 08 #Javascript
javascript正则表达式定义(语法)总结
Jan 08 #Javascript
jquery限定文本框只能输入数字(整数和小数)
Jan 08 #Javascript
jQuery实现的鼠标滑过弹出放大图片特效
Jan 08 #Javascript
jQuery鼠标悬浮链接弹出跟随图片实例代码
Jan 08 #Javascript
javascript中select下拉框的用法总结
Jan 07 #Javascript
You might like
百事可乐也出咖啡了 双倍咖啡因双倍快乐
2021/03/03 咖啡文化
一个显示天气预报的程序
2006/10/09 PHP
删除无限分类并同时删除它下面的所有子分类的方法
2010/08/08 PHP
php中计算中文字符串长度、截取中文字符串的函数代码
2011/08/09 PHP
PHP中两个float(浮点数)比较实例分析
2015/09/27 PHP
PHP使用Mysqli类库实现完美分页效果的方法
2016/04/07 PHP
PHP的mysqli_ssl_set()函数讲解
2019/01/23 PHP
[原创]网络复制内容时常用的正则+editplus
2006/11/30 Javascript
Ajax一统天下之Dojo整合篇
2007/03/24 Javascript
js计算页面刷新的次数
2009/07/20 Javascript
用户注册常用javascript代码
2009/08/29 Javascript
通过下拉框的值来确定输入框是否可以为空的代码
2011/10/18 Javascript
日常收藏的jquery技巧
2015/12/02 Javascript
js实现瀑布流的三种方式比较
2020/06/28 Javascript
用JS生成UUID的方法实例
2016/03/30 Javascript
selenium 与 chrome 进行qq登录并发邮件操作实例详解
2017/04/06 Javascript
JS实现同一DOM元素上onClick事件与onDblClick事件并存的解决方法
2018/06/07 Javascript
webpack+vue-cli项目中引入外部非模块格式js的方法
2018/09/28 Javascript
Vue-Cli项目优化操作的实现
2019/10/27 Javascript
JavaScript canvas动画实现时钟效果
2020/02/10 Javascript
jQuery表单校验插件validator使用方法详解
2020/02/18 jQuery
[01:33]一分钟玩转DOTA2第三弹:DOTA2&DotA快捷操作大对比
2014/06/04 DOTA
Python运算符重载用法实例
2015/05/28 Python
Python的Tornado框架的异步任务与AsyncHTTPClient
2016/06/27 Python
django model去掉unique_together报错的解决方案
2016/10/18 Python
Django框架模板的使用方法示例
2019/05/25 Python
python ChainMap 合并字典的实现步骤
2019/06/11 Python
旅游管理毕业生自荐书
2014/02/02 职场文书
学习十八大报告感言
2014/02/04 职场文书
宗教学大学生职业生涯规划范文
2014/02/08 职场文书
公开承诺书格式
2014/05/21 职场文书
小学生国庆65周年演讲稿范文(2篇)
2014/09/21 职场文书
2014年食品安全工作总结
2014/12/04 职场文书
单位工资证明范本
2015/06/12 职场文书
MySQL 逻辑备份与恢复测试的相关总结
2021/05/14 MySQL
CSS filter 有什么神奇用途
2021/05/25 HTML / CSS