Javascript实现重力弹跳拖拽运动效果
声明:
By:GenialX
个人主页:胡旭博客 - www.ihuxu.com
QQ:2252065614
演示地址:
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 运动函数篇(二) (加速度运动、弹性运动、重力场运动(多方向+碰撞检测+重力加速度+能量损失运动)拖拽运动)层层深入
前言: 本人纯小白一个,有很多地方理解的没有各位大牛那么透彻,如有错误,请各位大牛指出斧正!小弟感激不尽. 本篇文章为您分析一下原生JS写加速度运动.弹性运动.重力场运 ...
- 第一百三十五节,JavaScript,封装库--拖拽
JavaScript,封装库--拖拽 封装库新增1个拖拽方法 /** tuo_zhuai()方法,将一个弹窗元素实现拖拽功能 * 注意:一般需要在css文件将元素里的某一个区块光标设置成提示可以拖拽, ...
- react实现的点击拖拽元素效果
之前用vue做日程管理组件的时候,用到了点击拖拽的效果,即点击元素,鼠标移动到哪里,元素移动到哪里,鼠标松开,拖拽停止,现在在弄react,于是也在想实现这个效果,经过一番折腾,效果出来了,代码如下: ...
- js实现音量拖拽的效果模拟
<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>js ...
- ToolStrip控件左右拖拽移动效果实现
1.主窗体下部添加一个Panel乘放ToolStrip控件以实现ToolStrip在窗体下部定位.2.当ToolStrip控件中子控件超出屏幕时,拖动控件可以实现滑动效果.拖动到控件边缘距窗体边缘1/ ...
- reactnative实现qq聊天消息气泡拖拽消失效果
前言(可跳过) 我在开发自己的APP时遇到了一个类似于qq聊天消息气泡拖拽消息的需求,因为在网上没有找到相关的组件,所以自己动手实现了一下 需求:对聊天消息气泡拖拽到一定长度松开时该气泡会消失(可自行 ...
- 拖拽系列一、JavaScript实现简单的拖拽效果
前端拖拽相关应用汇总 在现实生活中就像男孩子牵着(拖着)女朋友的手穿过马路:从马路的一端走到另一端这种场景很常见: 而在前端开发中拖拽效果也算是前端开发中应用最常见.最普遍的特效:其拖拽涉及知 ...
- 拖拽碰撞效果,高级浏览器下全部搞定(ie6-8还没有搞定)
<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...
- JavaScript小实例:拖拽应用(二)
经常在网站别人的网站的注册页中看到一个拖拽验证的效果,就是它的验证码刚开始不出来,而是有一个拖拽的条,你必须将这个拖拽条拖到底,验证码才出来,说了感觉跟没说一样,你还是不理解,好吧,我给个图你看看: ...
随机推荐
- Git版本控制工具安装与配置
这里太多,我写在这里方便复制: sudo yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-dev ...
- django开发项目的部署nginx
Django 部署(Nginx) 本文主要讲解 nginx + uwsgi socket 的方式来部署 Django,比 Apache mod_wsgi 要复杂一些,但这是目前主流的方法. 1. 运行 ...
- js判断浏览器的类型和获得浏览器的版本
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> ...
- 团队 作业6--展示(alpha阶段)
团队作业6--展示博客(alpha阶段) 一.团队信息 团队码云地址: https://gitee.com/kezhiqing/soft_team_blog 成员介绍: 个人博客地址 团队成员 个人博 ...
- PHP保存Base64图片base64_decode的问题 文件打不开的问题
PHP对Base64的支持非常好,有内置的base64_encode与base64_decode负责图片的Base64编码与解码. 编码上,只要将图片流读取到,而后使用base64_encode进 ...
- bzoj3629 / P4397 [JLOI2014]聪明的燕姿
P4397 [JLOI2014]聪明的燕姿 根据唯一分解定理 $n=q_{1}^{p_{1}}*q_{2}^{p_{2}}*q_{3}^{p_{3}}*......*q_{m}^{p_{m}}$ 而$ ...
- vue.js指令v-model实现方法
原文链接:http://www.jb51.net/article/99097.htm V-MODEL 是VUE 的一个指令,在input 控件上使用时,可以实现双向绑定. 通过看文档,发现他不过是一个 ...
- JS封装简单后代选择器
大概思路是这样的:通过判断传过来的参数是什么类型,如果是对象,那这里就是this(因为封装是自己用的,肯定不会随便乱传一个对象过来),如果是一个函数(匿名函数),那就是Dom加载(这里先不讲),如果是 ...
- 【安装】Nginx安装
系统平台:CentOS release 6.5 (Final) 64位. 安装编译工具及库文件 yum -y install make zlib zlib-devel gcc-c++ libtool ...
- 调用libpci库出现的问题和解决方法
调用libpci库出现的问题和解决方法 本方案以pciutils-3.5.1为例. 1. 从以下地址下载pciutils-3.5.1.tar.xz https://www.kernel.org ...