Javascript实现重力弹跳拖拽运动效果示例


Posted in Javascript onJune 28, 2013

演示地址:
http://www.ihuxu.com/project/gcdmove/

调用示例:
var GCDM = gcdMove(oDiv,100,0);
GCDM.startMove();//开始运动
GCDM.stopMove();//结束运动
该段JS代码已经封装好了,代码如下:
简要说明 - obj为要改动的对象元素,通常为某个div;iSpeedX,iSpeedY为div出师的横向(右侧),竖向(下)的初始速度,当然也可以设为零。

/** 
* @Desc 重力碰撞拖拽运动 - Gravity Crash Drag Move(gcdMove) 
* @Author GenialX 
* @URL www.ihuxu.com 
* @QQ 2252065614 
* @Date 2013.06.22 
*/ 
function gcdMove(obj, iSpeedX, iSpeedY) { 
_this = this;//public identifier 
//construct fun 
var gcdMove; 
//self defined fun 
var start; 
_this.startMove; 
//other var 
var iTimer; 
var iLastX = 0; 
var iLastY = 0; 
//construct fun 
start = function() { 
clearInterval(iTimer); 
iTimer = setInterval(function() { 
iSpeedY += 3; 
var l = obj.offsetLeft + iSpeedX; 
var t = obj.offsetTop + iSpeedY; 
if (t >= document.documentElement.clientHeight - obj.offsetHeight) { 
iSpeedY *= -0.8; 
iSpeedX *= 0.8; 
t = document.documentElement.clientHeight - obj.offsetHeight; 
} else if (t <= 0) { 
iSpeedY *= -1; 
iSpeedX *= 0.8; 
t = 0; 
} 
if (l >= document.documentElement.clientWidth - obj.offsetWidth) { 
iSpeedX *= -0.8; 
l = document.documentElement.clientWidth - obj.offsetWidth; 
} else if (l <= 0) { 
iSpeedX *= -0.8; 
l = 0; 
} 
if (Math.abs(iSpeedX) < 1) { 
iSpeedX = 0; 
} 
if (iSpeedX == 0 && iSpeedY == 0 && t == document.documentElement.clientHeight - obj.offsetHeight) { 
clearInterval(iTimer); 
} 
obj.style.left = l + 'px'; 
obj.style.top = t + 'px'; 
}, 30); 
} 
_this.startMove = function(){ 
obj.onmousedown = function(ev) { 
clearInterval(iTimer); 
var oEvent = ev || event; 
var disX = oEvent.clientX - obj.offsetLeft; 
var disY = oEvent.clientY - obj.offsetTop; 
document.onmousemove = function(ev) { 
var oEvent = ev || event; 
var l = oEvent.clientX - disX; 
var t = oEvent.clientY - disY; 
obj.style.left = l + 'px'; 
obj.style.top = t + 'px'; 
if(iLastX ==0){ 
iLastX = l; 
} 
if(iLastY == 0){ 
iLastY = t; 
} 
iSpeedX = l - iLastX; 
iSpeedY = t - iLastY; 
iLastX = l; 
iLastY = t; 
} 
} 
obj.onmouseup = function() { 
document.onmousedown = null; 
document.onmousemove = null; 
document.onmouseup = null; 
start(); 
} 
start(); 
} 
_this.stopMove = function(){ 
clearInterval(iTimer); 
obj.onmousedown = null; 
document.onmousemove = null; 
obj.onmouseup = null; 
iLastX = 0; 
iLastY = 0; 
iSpeedX = 0; 
iSpeedY = 0; 
disX = 0; 
disY = 0; 
} 
//CONSTRUCT AREA 
var gcdMove = function() { 
if (!iSpeedX) { 
iSpeedX = 0; 
} 
if (!iSpeedY) { 
iSpeedY = 0; 
} 
} 
gcdMove(); 
}
Javascript 相关文章推荐
统计出现最多的字符次数的js代码
Dec 03 Javascript
jQuery Jcrop插件实现图片选取功能
Nov 23 Javascript
jQuery消息提示框插件Tipso
May 04 Javascript
jQuery实现两款有动画功能的导航菜单代码
Sep 16 Javascript
JS表格组件神器bootstrap table详解(基础版)
Dec 08 Javascript
vue实现可增删查改的成绩单
Oct 27 Javascript
jquery css实现邮箱自动补全
Nov 14 Javascript
vue-cli+webpack在生成的项目中使用bootstrap实例代码
May 26 Javascript
angular.js中解决跨域问题的三种方式
Jul 12 Javascript
怎么使用javascript深度拷贝一个数组
Jun 06 Javascript
深入解读Node.js中的koa源码
Jun 17 Javascript
vue 单页应用和多页应用的优劣
Oct 22 Javascript
jQuery随便控制任意div隐藏的方法
Jun 28 #Javascript
js实时获取系统当前时间实例代码
Jun 28 #Javascript
js复制到剪切板的实例方法
Jun 28 #Javascript
Javascript无阻塞加载具体方式
Jun 28 #Javascript
Extjs4 类的定义和扩展实例
Jun 28 #Javascript
JavaScript和CSS通过expression实现Table居中显示
Jun 28 #Javascript
jquery异步跨域访问代码
Jun 28 #Javascript
You might like
php cc攻击代码与防范方法
2012/10/18 PHP
php实现根据IP地址获取其所在省市的方法
2015/04/30 PHP
PHP的Laravel框架中使用AdminLTE模板来编写网站后台界面
2016/03/21 PHP
Yii视图操作之自定义分页实现方法
2016/07/14 PHP
PHP常用正则表达式精选(推荐)
2019/05/28 PHP
PHP-FPM 设置多pool及配置文件重写操作示例
2019/10/02 PHP
使用 PHP Masked Package 屏蔽敏感数据的实现方法
2019/10/15 PHP
遍历DOM对象内的元素属性示例代码
2014/02/08 Javascript
Node.js的特点和应用场景介绍
2014/11/04 Javascript
js实现类似jquery里animate动画效果的方法
2015/04/10 Javascript
JS实现带有3D立体感的银灰色竖排折叠菜单代码
2015/10/20 Javascript
原生js实现类似fullpage的单页/全屏滚动
2017/01/22 Javascript
基于JavaScript实现一个简单的Vue
2018/09/26 Javascript
jQuery实现的网站banner图片无缝轮播效果完整实例
2019/01/28 jQuery
微信小程序:数据存储、传值、取值详解
2019/05/07 Javascript
[15:23]教你分分钟做大人:虚空假面
2014/10/30 DOTA
Python判断变量是否为Json格式的字符串示例
2017/05/03 Python
Python使用openpyxl读写excel文件的方法
2017/06/30 Python
获取Django项目的全部url方法详解
2017/10/26 Python
使用Python将Mysql的查询数据导出到文件的方法
2019/02/25 Python
python3通过selenium爬虫获取到dj商品的实例代码
2019/04/25 Python
python [:3] 实现提取数组中的数
2019/11/27 Python
使用css3制作动感导航条示例
2014/01/26 HTML / CSS
Canvas 文本转粒子效果的实现代码
2019/02/14 HTML / CSS
HTML5实现可缩放时钟代码
2017/08/28 HTML / CSS
美国内衣品牌:Leonisa
2016/08/14 全球购物
校园安全演讲稿
2014/05/09 职场文书
高三励志标语
2014/06/05 职场文书
乡镇干部个人对照检查材料思想汇报
2014/10/04 职场文书
上课迟到检讨书300字
2014/10/15 职场文书
2014镇党委书记党建工作汇报材料
2014/11/02 职场文书
2014幼儿园中班工作总结
2014/11/10 职场文书
委托收款证明
2015/06/23 职场文书
教你用eclipse连接mysql数据库
2021/04/22 MySQL
教你如何用cmd快速登录服务器
2022/06/10 Servers
Three.js实现雪糕地球的使用示例详解
2022/07/07 Javascript