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 相关文章推荐
js格式化时间小结
Nov 03 Javascript
jQuery点击其他地方时菜单消失的实现方法
Apr 22 Javascript
基于jquery实现轮播特效
Apr 22 Javascript
JavaScript遍历求解数独问题的主要思路小结
Jun 12 Javascript
Ajax异步获取html数据中包含js方法无效的解决方法
Feb 20 Javascript
JS ES6多行字符串与连接字符串的表示方法
Apr 26 Javascript
js实现首屏延迟加载实现方法 js实现多屏单张图片延迟加载效果
Jul 17 Javascript
jquery自定义显示消息数量
Dec 19 jQuery
Electron 如何调用本地模块的方法
Feb 01 Javascript
详解如何更好的使用module vuex
Mar 27 Javascript
为vue项目自动设置请求状态的配置方法
Jun 09 Javascript
实例讲解React 组件生命周期
Jul 08 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
检查php文件中是否含有bom的函数
2012/05/31 PHP
PHP检测用户语言的方法
2015/06/15 PHP
php微信高级接口群发 多客服
2016/06/23 PHP
PHP中strtr与str_replace函数运行性能简单测试示例
2019/06/22 PHP
laravel 验证错误信息到 blade模板的方法
2019/09/29 PHP
基于jQuery的的一个隔行变色,鼠标移动变色的小插件
2010/07/06 Javascript
javascript将异步校验表单改写为同步表单
2015/01/27 Javascript
基于jquery实现百度新闻导航菜单滑动动画
2016/03/15 Javascript
Node.js刷新session过期时间的实现方法推荐
2016/05/18 Javascript
jQuery的 $.ajax防止重复提交的两种方法(推荐)
2016/10/14 Javascript
微信小程序-小说阅读小程序实例(demo)
2017/01/12 Javascript
详解AngularJS 路由 resolve用法
2017/04/24 Javascript
jQuery创建及操作xml格式数据示例
2018/05/26 jQuery
通过jQuery学习js类型判断的技巧
2019/05/27 jQuery
详解如何提升JSON.stringify()的性能
2019/06/12 Javascript
jQuery实现评论模块
2020/08/19 jQuery
Python 面向对象 成员的访问约束
2008/12/23 Python
Python处理JSON时的值报错及编码报错的两则解决实录
2016/06/26 Python
Python算法输出1-9数组形成的结果为100的所有运算式
2017/11/03 Python
python自动保存百度盘资源到百度盘中的实例代码
2019/08/26 Python
Python django搭建layui提交表单,表格,图标的实例
2019/11/18 Python
python程序文件扩展名知识点详解
2020/02/27 Python
解决python脚本中error: unrecognized arguments: True错误
2020/04/20 Python
python3中布局背景颜色代码分析
2020/12/01 Python
selenium+headless chrome爬虫的实现示例
2021/01/08 Python
Giglio美国站:意大利奢侈品购物网
2018/02/10 全球购物
俄罗斯苹果优质经销商商店:iPort
2020/05/27 全球购物
iostream与iostream.h的区别
2015/01/16 面试题
项目投资建议书
2014/05/16 职场文书
电子信息工程专业自荐书
2014/06/24 职场文书
一年级语文上册复习计划
2015/01/17 职场文书
《赵州桥》教学反思
2016/02/17 职场文书
 Python 中 logging 模块使用详情
2022/03/03 Python
前端JS获取URL参数的4种方法总结
2022/04/05 Javascript
IDEA 2022 Translation 未知错误 翻译文档失败
2022/04/24 Java/Android
总结三种用 Python 作为小程序后端的方式
2022/05/02 Python