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 相关文章推荐
利用google提供的API(JavaScript接口)获取网站访问者IP地理位置的代码详解
Jul 24 Javascript
JavaScript中的私有/静态属性介绍
Jul 26 Javascript
javascript 10进制和62进制的相互转换
Jul 31 Javascript
百度地图自定义控件分享
Mar 04 Javascript
jquery checkbox的相关操作总结
Oct 17 Javascript
如何解决jQuery EasyUI 已打开Tab重新加载问题
Dec 19 Javascript
javascript九宫格图片随机打乱位置的实现方法
Mar 15 Javascript
javascript作用域链与执行环境详解
Mar 25 Javascript
微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(一)
May 11 Javascript
vue.js实现刷新当前页面的方法教程
Jul 05 Javascript
vue watch自动检测数据变化实时渲染的方法
Jan 16 Javascript
Vue+Mock.js模拟登录和表格的增删改查功能
Jul 26 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中将网页导出为Word文档的代码
2012/05/25 PHP
apache+codeigniter 通过.htcaccess做动态二级域名解析
2012/07/01 PHP
php实现通用的信用卡验证类
2015/03/24 PHP
JavaScript面象对象设计
2008/04/28 Javascript
JQuery 解析多维的Json数据格式
2009/11/02 Javascript
为EasyUI的Tab标签添加右键菜单的方法
2012/07/14 Javascript
javascript通过class来获取元素实现代码
2013/02/20 Javascript
JQuery对class属性的操作实现按钮开关效果
2013/10/11 Javascript
JavaScript中的prototype和constructor简明总结
2014/04/05 Javascript
JavaScript使ifram跨域相互访问及与PHP通信的实例
2016/03/03 Javascript
JS使用cookie设置样式的方法
2016/06/30 Javascript
jQuery.ajax 跨域请求webapi设置headers的解决方案
2016/08/08 Javascript
JS滚动到指定位置导航栏固定顶部
2017/07/03 Javascript
深入理解vue Render函数
2017/07/19 Javascript
浅谈webpack性能榨汁机(打包速度优化)
2019/01/09 Javascript
深入理解 JS 垃圾回收
2019/06/03 Javascript
vue 调用 RESTful风格接口操作
2020/08/11 Javascript
el-form 多层级表单的实现示例
2020/09/10 Javascript
Vue实现多页签组件
2021/01/14 Vue.js
python处理圆角图片、圆形图片的例子
2014/04/25 Python
Python中字符串的常见操作技巧总结
2016/07/28 Python
python的构建工具setup.py的方法使用示例
2017/10/23 Python
python实现逐个读取txt字符并修改
2018/12/24 Python
基于python-opencv3的图像显示和保存操作
2019/06/27 Python
python selenium操作cookie的实现
2020/03/18 Python
Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率)
2021/01/29 Python
html5 Web SQL Database 之事务处理函数transaction与executeSQL解析
2013/11/07 HTML / CSS
SKECHERS官方旗舰店:美国舒适运动休闲品牌
2017/12/22 全球购物
英国医生在线预约:Top Doctors
2019/10/30 全球购物
Tommy Hilfiger澳洲官网:美国高端休闲领导品牌
2020/12/16 全球购物
高中军训感言200字
2014/02/23 职场文书
2014年依法行政工作总结
2014/11/19 职场文书
房地产项目合作意向书
2015/05/08 职场文书
2015年新农村建设工作总结
2015/05/22 职场文书
幼儿园小班班务总结
2015/08/03 职场文书
Python字符串对齐方法使用(ljust()、rjust()和center())
2021/04/26 Python