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代码格式化和语法着色V2
Oct 14 Javascript
(function(){})()的用法与优点
Mar 11 Javascript
jQuery 获取URL的GET参数值的小例子
Apr 18 Javascript
form表单action提交的js部分与html部分
Jan 07 Javascript
jQuery获取和设置表单元素的方法
Feb 14 Javascript
jQuery密码强度检测插件passwordStrength用法实例分析
Oct 30 Javascript
js滑动提示效果代码分享
Mar 10 Javascript
vue-cli脚手架-bulid下的配置文件
Mar 27 Javascript
JS实现打字游戏
Dec 17 Javascript
vue实现div可拖动位置也可改变盒子大小的原理
Sep 16 Javascript
Jquery Fade用法详解
Nov 06 jQuery
JS实现简单九宫格抽奖
Jun 28 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
海贼王:最美的悬赏令!
2020/03/02 日漫
PHP文件下载类
2006/12/06 PHP
php for 循环使用的简单实例
2016/06/02 PHP
使用laravel和ajax实现整个页面无刷新的操作方法
2019/10/03 PHP
php模拟实现斗地主发牌
2020/04/22 PHP
javascript下查找父节点的简单方法
2007/08/13 Javascript
JavaScript函数、方法、对象代码
2008/10/29 Javascript
关于jquery性能最佳实践的讨论,与求教
2012/03/30 Javascript
jquery 面包屑导航 具体实现
2013/06/05 Javascript
多引号嵌套的变量命名的问题
2014/05/09 Javascript
JS简单编号生成器实现方法(附demo源码下载)
2016/04/05 Javascript
JavaScript ES5标准中新增的Array方法
2016/06/28 Javascript
jquery平滑滚动到顶部插件使用详解
2017/05/08 jQuery
canvas+gif.js打造自己的数字雨头像的示例代码
2017/10/26 Javascript
深入剖析Node.js cluster模块
2018/05/23 Javascript
浅谈ElementUI中switch回调函数change的参数问题
2018/08/24 Javascript
详解Vue项目中出现Loading chunk {n} failed问题的解决方法
2018/09/14 Javascript
基于Taro的微信小程序模板消息-获取formId功能模块封装实践
2019/07/15 Javascript
Vue通过getAction的finally来最大程度避免影响主数据呈现问题
2020/04/24 Javascript
vue prop传值类型检验方式
2020/07/30 Javascript
element-ui中el-upload多文件一次性上传的实现
2020/12/02 Javascript
Python读csv文件去掉一列后再写入新的文件实例
2017/12/28 Python
Python实现合并同一个文件夹下所有PDF文件的方法示例
2018/04/28 Python
python利用pandas将excel文件转换为txt文件的方法
2018/10/23 Python
numpy linalg模块的具体使用方法
2019/05/26 Python
详解Anconda环境下载python包的教程(图形界面+命令行+pycharm安装)
2019/11/11 Python
Python加密模块的hashlib,hmac模块使用解析
2020/01/02 Python
python 线性回归分析模型检验标准--拟合优度详解
2020/02/24 Python
python中Ansible模块的Playbook的具体使用
2020/05/28 Python
GUESS西班牙官方网上商城:美国服饰品牌
2017/03/15 全球购物
《识字五》教学反思
2014/03/01 职场文书
承诺书格式
2014/06/03 职场文书
班级学雷锋活动总结
2014/06/26 职场文书
党的群众路线教育实践活动个人整改方案
2014/10/25 职场文书
党员廉洁自律个人总结
2015/02/13 职场文书
2015年领导干部廉洁自律工作总结
2015/05/26 职场文书