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 相关文章推荐
再谈javascript面向对象编程
Mar 18 Javascript
json原理分析及实例介绍
Nov 29 Javascript
js 删除数组的几种方法小结
Feb 21 Javascript
Bootstrap表单布局样式代码
May 31 Javascript
JavaScript实现经典排序算法之选择排序
Dec 28 Javascript
Jquery与Bootstrap实现后台管理页面增删改查功能示例
Jan 22 Javascript
JS中的Replace()传入函数时的用法详解
Sep 11 Javascript
详解vue添加删除元素的方法
Jun 30 Javascript
VsCode与Node.js知识点详解
Sep 05 Javascript
Javascript操作select控件代码实例
Feb 14 Javascript
jquery实现的放大镜效果示例
Feb 24 jQuery
如何在vue-cli中使用css-loader实现css module
Jan 07 Vue.js
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
学习discuz php 引入文件的方法DISCUZ_ROOT
2009/06/21 PHP
解析thinkphp中的导入文件标签
2013/06/20 PHP
微信公众号之主动给用户发送消息功能
2019/06/22 PHP
Laravel 5.4前后台分离,通过不同的二级域名访问方法
2019/10/13 PHP
JS中怎样判断undefined(比较不错的方法)
2014/03/27 Javascript
jQuery实现仿新浪微博浮动的消息提示框(可智能定位)
2015/10/10 Javascript
Bootstrap创建可折叠的组件
2016/02/23 Javascript
实例讲解JavaScript的Backbone.js框架中的View视图
2016/05/05 Javascript
简单实现js页面切换功能
2021/01/10 Javascript
微信小程序 JS动态修改样式的实现代码
2017/02/10 Javascript
微信小程序如何获知用户运行小程序的场景教程
2017/05/17 Javascript
自定义类似于jQuery UI Selectable 的Vue指令v-selectable
2017/08/23 jQuery
vue路由导航守卫和请求拦截以及基于node的token认证的方法
2019/04/07 Javascript
关于微信小程序获取小程序码并接受buffer流保存为图片的方法
2019/06/07 Javascript
简单了解微信小程序 e.target与e.currentTarget的不同
2019/09/27 Javascript
[26:52]LGD vs EG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python中引用与复制用法实例分析
2015/06/04 Python
Python遍历目录中的所有文件的方法
2016/07/08 Python
Python编程给numpy矩阵添加一列方法示例
2017/12/04 Python
pygame实现五子棋游戏
2019/10/29 Python
python实现查找所有程序的安装信息
2020/02/18 Python
python中sort sorted reverse reversed函数的区别说明
2020/05/11 Python
CSS3中利用animation属性创建雪花飘落特效
2014/05/14 HTML / CSS
苹果香港官方商城:Apple香港
2016/09/14 全球购物
如何做好总经理助理
2013/11/12 职场文书
计生工作先进事迹
2014/08/15 职场文书
文秘班元旦晚会活动策划方案
2014/08/28 职场文书
三方股份合作协议书
2014/10/13 职场文书
2014年学生会主席工作总结
2014/11/07 职场文书
秋收起义观后感
2015/06/11 职场文书
2016年万圣节活动个人总结
2016/04/05 职场文书
描述鲁迅的名言整理,一生受用
2019/08/08 职场文书
聊聊golang中多个defer的执行顺序
2021/05/08 Golang
JS数组去重详情
2021/11/07 Javascript
关于MybatisPlus配置双数据库驱动连接数据库问题
2022/01/22 Java/Android
Win11查看设备管理器
2022/04/19 数码科技