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 读取页面load get post ajax 四种方式代码写法
Apr 02 Javascript
php中给js数组赋值方法
Mar 10 Javascript
Javascript限制网页只能在微信内置浏览器中访问
Nov 09 Javascript
jquery中EasyUI使用技巧小结
Feb 10 Javascript
jQuery实现6位数字密码输入框
Dec 29 Javascript
浅谈Vue SSR 的 Cookies 问题
Nov 20 Javascript
Angular实现搜索框及价格上下限功能
Jan 19 Javascript
React事件处理的机制及原理
Dec 03 Javascript
20道JS原理题助你面试一臂之力(必看)
Jul 22 Javascript
分享Angular http interceptors 拦截器使用(推荐)
Nov 10 Javascript
Vue获取页面元素的相对位置的方法示例
Feb 05 Javascript
vue v-for 点击当前行,获取当前行数据及event当前事件对象的操作
Sep 10 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中Socket连接及读写数据超时问题分析
2016/07/19 PHP
详解php用curl调用接口方法,get和post两种方式
2017/01/13 PHP
ThinkPHP实现静态缓存和动态缓存示例代码
2017/05/02 PHP
Yii 2.0实现联表查询加搜索分页的方法示例
2017/08/02 PHP
javascript 浏览器检测代码精简版
2010/03/04 Javascript
匹配任意字符的正则表达式写法
2010/04/29 Javascript
jquery1.4.2 for Visual studio 2010 模板文件
2010/07/14 Javascript
js中的caller和callee属性介绍和例子
2014/06/07 Javascript
moment.js轻松实现获取当前日期是当年的第几周
2015/02/05 Javascript
微信小程序 教程之小程序配置
2016/10/17 Javascript
Angular动态添加、删除输入框并计算值实例代码
2017/03/29 Javascript
js实现网页的两个input标签内的数值加减(示例代码)
2017/08/15 Javascript
详解vue-cli本地环境API代理设置和解决跨域
2017/09/05 Javascript
jQueryMobile之窗体长内容的缺陷与解决方法实例分析
2017/09/20 jQuery
vue异步加载高德地图的实现
2018/06/19 Javascript
jQuery实现基本动画效果的方法详解
2018/09/06 jQuery
JavaScript ECMA-262-3 深入解析(一):执行上下文实例分析
2020/04/25 Javascript
vue+ElementUI 关闭对话框清空验证,清除form表单的操作
2020/08/06 Javascript
[05:28]刀塔密之一:团结则存
2014/07/03 DOTA
[00:42]《辉夜杯》—职业组预选赛12月3日15点 正式打响
2015/12/03 DOTA
[49:28]VP vs Optic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python字符串匹配算法KMP实例
2015/07/18 Python
python 接口_从协议到抽象基类详解
2017/08/24 Python
python文件选择对话框的操作方法
2019/06/27 Python
tensorflow的ckpt及pb模型持久化方式及转化详解
2020/02/12 Python
Python3创建Django项目的几种方法(3种)
2020/06/03 Python
Python实现迪杰斯特拉算法过程解析
2020/09/18 Python
详解java调用python的几种用法(看这篇就够了)
2020/12/10 Python
加拿大女装网上购物:Reitmans
2016/10/20 全球购物
后勤部长岗位职责
2013/12/14 职场文书
快递员岗位职责
2014/09/12 职场文书
2015年社会实践个人总结
2015/03/06 职场文书
敬老院志愿者活动总结
2015/05/06 职场文书
2015年学校心理健康教育工作总结
2015/05/11 职场文书
读《庄子》有感:美而不自知
2019/11/06 职场文书
HTML页面滚动时部分内容位置固定不滚动的实现
2021/04/14 HTML / CSS