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 相关文章推荐
javascript基本语法分析说明
Jun 15 Javascript
仿新浪微博返回顶部的jquery实现代码
Oct 01 Javascript
jquery的父子兄弟节点查找示例代码
Mar 03 Javascript
防止按钮在短时间内被多次点击的方法
Mar 10 Javascript
情人节单身的我是如何在敲完代码之后收到12束玫瑰的(javascript)
Aug 21 Javascript
jQuery链式调用与show知识浅析
May 11 Javascript
超简单的Vue.js环境搭建教程
Mar 17 Javascript
vue中如何实现变量和字符串拼接
Jun 19 Javascript
微信小程序踩坑记录之解决tabBar.list[3].selectedIconPath大小超过40kb
Jul 04 Javascript
深入理解与使用keep-alive(配合router-view缓存整个路由页面)
Sep 25 Javascript
对node通过fs模块判断文件是否是文件夹的实例讲解
Jun 10 Javascript
JS中的算法与数据结构之列表(List)实例详解
Aug 16 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
一个简单实现多条件查询的例子
2006/10/09 PHP
php 缓存函数代码
2008/08/27 PHP
PHP实现腾讯短网址生成api接口实例
2020/12/08 PHP
jQuery+CSS 实现的超Sexy下拉菜单
2010/01/17 Javascript
构造函数+原型模式构造js自定义对象(最通用)
2014/05/12 Javascript
JS实现图片无间断滚动代码汇总
2014/07/30 Javascript
JavaScript中的数组操作介绍
2014/12/30 Javascript
JavaScript数组操作详解
2017/02/04 Javascript
centos 上快速搭建ghost博客方法分享
2018/05/23 Javascript
Flutter实现仿微信底部菜单栏功能
2019/09/18 Javascript
在Django的form中使用CSS进行设计的方法
2015/07/18 Python
python实现下载指定网址所有图片的方法
2015/08/08 Python
python版简单工厂模式
2017/10/16 Python
python实现图像识别功能
2018/01/29 Python
Python常见字符串操作函数小结【split()、join()、strip()】
2018/02/02 Python
pandas数据框,统计某列数据对应的个数方法
2018/04/11 Python
Django中的Model操作表的实现
2018/07/24 Python
python得到一个excel的全部sheet标签值方法
2018/12/10 Python
python实现批量视频分帧、保存视频帧
2019/05/31 Python
Python发展史及网络爬虫
2019/06/19 Python
简单了解Django ContentType内置组件
2019/07/23 Python
使用Tensorflow实现可视化中间层和卷积层
2020/01/24 Python
python中rc1什么意思
2020/06/19 Python
在keras里实现自定义上采样层
2020/06/28 Python
python计算auc的方法
2020/09/09 Python
Ryderwear澳洲官网:澳大利亚高端健身训练装备品牌
2018/09/18 全球购物
俄罗斯园林植物网上商店:Garshinka
2020/07/16 全球购物
abstract是什么意思
2012/02/12 面试题
Python中pass语句的作用是什么
2016/06/01 面试题
校运会广播稿100字
2014/01/27 职场文书
2016党校培训心得体会
2016/01/07 职场文书
2016年社会主义核心价值观心得体会
2016/01/21 职场文书
《槐乡的孩子》教学反思
2016/02/20 职场文书
SpringCloud Alibaba 基本开发框架搭建过程
2021/06/13 Java/Android
Kubernetes部署实例并配置Deployment、网络映射、副本集
2022/04/01 Servers
TypeScript 使用 Tuple Union 声明函数重载
2022/04/07 Javascript