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的实现简单的表格中增加或删除下一行
Aug 01 Javascript
对xmlHttp对象方法和属性的理解
Jan 17 Javascript
js模仿html5 placeholder适应于不支持的浏览器
Jan 13 Javascript
javascript实现获取cookie过期时间的变通方法
Aug 14 Javascript
JS中的数组方法笔记整理
Jul 26 Javascript
js中的eval()函数把含有转义字符的字符串转换成Object对象的方法
Dec 02 Javascript
js原生Ajax的封装和原理详解
Mar 11 Javascript
node操作mysql数据库实例详解
Mar 17 Javascript
在JS中如何把毫秒转换成规定的日期时间格式实例
May 11 Javascript
JavaScript实现新年倒计时效果
Nov 17 Javascript
微信小程序--特定区域滚动到顶部时固定的方法
Apr 28 Javascript
node.js 如何监视文件变化
Sep 01 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
第十四节 命名空间 [14]
2006/10/09 PHP
php数组函数序列 之array_count_values() 统计数组中所有值出现的次数函数
2011/10/29 PHP
PHP设置图片文件上传大小的具体实现方法
2013/10/11 PHP
从零学JS之你需要了解的几本书
2014/05/19 Javascript
jquery 获取 outerHtml 包含当前节点本身的代码
2014/10/30 Javascript
谷歌浏览器调试JavaScript小技巧
2014/12/29 Javascript
jQuery地图map悬停显示省市代码分享
2015/08/20 Javascript
7个去伪存真的JavaScript面试题
2016/01/07 Javascript
jQuery+ajax实现滚动到页面底部自动加载图文列表效果(类似图片懒加载)
2016/06/07 Javascript
jQuery动态改变多行文本框高度的方法
2016/09/07 Javascript
微信公众平台开发教程(六)获取个性二维码的实例
2016/12/02 Javascript
深究AngularJS如何获取input的焦点(自定义指令)
2017/06/12 Javascript
vue scroller返回页面记住滚动位置的实例代码
2018/01/29 Javascript
react的滑动图片验证码组件的示例代码
2019/02/27 Javascript
JQuery animate动画应用示例
2019/05/14 jQuery
vue日历/日程提醒/html5本地缓存功能
2019/09/02 Javascript
windows下create-react-app 升级至3.3.1版本踩坑记
2020/02/17 Javascript
js实现复制粘贴的两种方法
2020/12/04 Javascript
windows如何把已安装的nodejs高版本降级为低版本(图文教程)
2020/12/14 NodeJs
Python SQLite3数据库操作类分享
2014/06/10 Python
使用Python的Flask框架实现视频的流媒体传输
2015/03/31 Python
Anaconda2下实现Python2.7和Python3.5的共存方法
2018/06/11 Python
pycharm通过anaconda安装pyqt5的教程
2020/03/24 Python
python subprocess pipe 实时输出日志的操作
2020/12/05 Python
python通用数据库操作工具 pydbclib的使用简介
2020/12/21 Python
美国现代家具和家居商店:Apt2B
2016/08/29 全球购物
英国网上购买门:Direct Doors
2018/06/07 全球购物
印尼值得信赖的在线交易网站:Bukalapak
2019/03/11 全球购物
开业庆典策划方案
2014/02/18 职场文书
技校毕业生自荐信范文
2014/03/07 职场文书
英语故事演讲稿
2014/04/29 职场文书
2014年学生管理工作总结
2014/12/20 职场文书
教你用Python+selenium搭建自动化测试环境
2021/06/18 Python
K8s部署发布Golang应用程序的实现方法
2021/07/16 Golang
MySQL聚簇索引和非聚簇索引的区别详情
2022/06/14 MySQL
python高温预警数据获取实例
2022/07/23 Python