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 相关文章推荐
HTML node相关的一些资料整理
Jan 01 Javascript
jQuery代码优化 遍历篇
Nov 01 Javascript
js字符串完全替换函数分享
Dec 03 Javascript
jQuery实现菜单感应鼠标滑动动画效果的方法
Feb 28 Javascript
JS HTML5拖拽上传图片预览
Jul 18 Javascript
原生js实现下拉框功能(支持键盘事件)
Jan 13 Javascript
vue.js学习之UI组件开发教程
Jul 03 Javascript
浅谈Vue下使用百度地图的简易方法
Mar 23 Javascript
Vue父组件如何获取子组件中的变量
Jul 24 Javascript
基于layui的table插件进行复选框联动功能的实现方法
Sep 19 Javascript
JavaScript语法约定和程序调试原理解析
Nov 03 Javascript
nuxt 路由、过渡特效、中间件的实现代码
Nov 06 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
Access数据库导入Mysql的方法之一
2006/10/09 PHP
php一些公用函数的集合
2008/03/27 PHP
php开启安全模式后禁用的函数集合
2011/06/26 PHP
php简单实现MVC
2015/02/05 PHP
PHP实现无限极分类的两种方式示例【递归和引用方式】
2019/03/25 PHP
YII框架行为behaviors用法示例
2019/04/26 PHP
javascript定时保存表单数据的代码
2011/03/17 Javascript
Ajax执行顺序流程及回调问题分析
2012/12/10 Javascript
js判断登陆用户名及密码是否为空的简单实例
2016/05/16 Javascript
echarts3 使用总结(绘制各种图表,地图)
2017/01/05 Javascript
node跨域转发 express+http-proxy-middleware的使用
2018/05/31 Javascript
JavaScript中的事件与异常捕获详析
2019/02/24 Javascript
基于layui内置模块(element常用元素的操作)
2019/09/20 Javascript
vue组件开发之tab切换组件使用详解
2020/08/21 Javascript
详解ES6实现类的私有变量的几种写法
2021/02/10 Javascript
Python采用raw_input读取输入值的方法
2014/08/18 Python
python实现多线程暴力破解登陆路由器功能代码分享
2015/01/04 Python
Python获取DLL和EXE文件版本号的方法
2015/03/10 Python
pygame学习笔记(6):完成一个简单的游戏
2015/04/15 Python
简单解决Python文件中文编码问题
2015/11/22 Python
Python的Flask框架及Nginx实现静态文件访问限制功能
2016/06/27 Python
CentOS6.5设置Django开发环境
2016/10/13 Python
mac下给python3安装requests库和scrapy库的实例
2018/06/13 Python
python查看模块安装位置的方法
2018/10/16 Python
python django框架中使用FastDFS分布式文件系统的安装方法
2019/06/10 Python
python中列表的切片与修改知识点总结
2019/07/23 Python
python求numpy中array按列非零元素的平均值案例
2020/06/08 Python
政法学院毕业生求职信
2014/02/28 职场文书
村主任个人对照检查材料
2014/10/01 职场文书
大三学生英语考试作弊检讨书
2015/01/01 职场文书
建筑工地资料员岗位职责
2015/04/13 职场文书
护士长2015年终工作总结
2015/04/24 职场文书
教师节表彰会主持词
2015/07/06 职场文书
2015年教师节新闻稿
2015/07/17 职场文书
售房协议书范本
2015/08/11 职场文书
再见,2019我们不负使命;你好,2020我们砥砺前行
2020/01/03 职场文书