声明:

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出师的横向(右侧),竖向(下)的初始速度,当然也可以设为零。

  1. /**
  2. * @Desc 重力碰撞拖拽运动 - Gravity Crash Drag Move(gcdMove)
  3. * @Author GenialX
  4. * @URL www.ihuxu.com
  5. * @QQ 2252065614
  6. * @Date 2013.06.22
  7. */
  8.  
  9. function gcdMove(obj, iSpeedX, iSpeedY) {
  10.  
  11. _this = this;//public identifier
  12.  
  13. //construct fun
  14. var gcdMove;
  15. //self defined fun
  16. var start;
  17. _this.startMove;
  18. //other var
  19. var iTimer;
  20. var iLastX = 0;
  21. var iLastY = 0;
  22.  
  23. //construct fun
  24. start = function() {
  25. clearInterval(iTimer);
  26.  
  27. iTimer = setInterval(function() {
  28.  
  29. iSpeedY += 3;
  30.  
  31. var l = obj.offsetLeft + iSpeedX;
  32. var t = obj.offsetTop + iSpeedY;
  33.  
  34. if (t >= document.documentElement.clientHeight - obj.offsetHeight) {
  35. iSpeedY *= -0.8;
  36. iSpeedX *= 0.8;
  37. t = document.documentElement.clientHeight - obj.offsetHeight;
  38. } else if (t <= 0) {
  39. iSpeedY *= -1;
  40. iSpeedX *= 0.8;
  41. t = 0;
  42. }
  43.  
  44. if (l >= document.documentElement.clientWidth - obj.offsetWidth) {
  45. iSpeedX *= -0.8;
  46. l = document.documentElement.clientWidth - obj.offsetWidth;
  47. } else if (l <= 0) {
  48. iSpeedX *= -0.8;
  49. l = 0;
  50. }
  51.  
  52. if (Math.abs(iSpeedX) < 1) {
  53. iSpeedX = 0;
  54. }
  55.  
  56. if (iSpeedX == 0 && iSpeedY == 0 && t == document.documentElement.clientHeight - obj.offsetHeight) {
  57. clearInterval(iTimer);
  58. }
  59.  
  60. obj.style.left = l + 'px';
  61. obj.style.top = t + 'px';
  62.  
  63. }, 30);
  64. }
  65.  
  66. _this.startMove = function(){
  67. obj.onmousedown = function(ev) {
  68.  
  69. clearInterval(iTimer);
  70.  
  71. var oEvent = ev || event;
  72.  
  73. var disX = oEvent.clientX - obj.offsetLeft;
  74. var disY = oEvent.clientY - obj.offsetTop;
  75.  
  76. document.onmousemove = function(ev) {
  77. var oEvent = ev || event;
  78.  
  79. var l = oEvent.clientX - disX;
  80. var t = oEvent.clientY - disY;
  81.  
  82. obj.style.left = l + 'px';
  83. obj.style.top = t + 'px';
  84.  
  85. if(iLastX ==0){
  86. iLastX = l;
  87. }
  88. if(iLastY == 0){
  89. iLastY = t;
  90. }
  91. iSpeedX = l - iLastX;
  92. iSpeedY = t - iLastY;
  93.  
  94. iLastX = l;
  95. iLastY = t;
  96.  
  97. }
  98. }
  99.  
  100. obj.onmouseup = function() {
  101. document.onmousedown = null;
  102. document.onmousemove = null;
  103. document.onmouseup = null;
  104. start();
  105. }
  106. start();
  107. }
  108.  
  109. _this.stopMove = function(){
  110. clearInterval(iTimer);
  111. obj.onmousedown = null;
  112. document.onmousemove = null;
  113. obj.onmouseup = null;
  114. iLastX = 0;
  115. iLastY = 0;
  116. iSpeedX = 0;
  117. iSpeedY = 0;
  118. disX = 0;
  119. disY = 0;
  120. }
  121.  
  122. //CONSTRUCT AREA
  123. var gcdMove = function() {
  124.  
  125. if (!iSpeedX) {
  126. iSpeedX = 0;
  127. }
  128. if (!iSpeedY) {
  129. iSpeedY = 0;
  130. }
  131. }
  132.  
  133. gcdMove();
  134. }

Javascript实现重力弹跳拖拽运动效果的更多相关文章

  1. js 运动函数篇(二) (加速度运动、弹性运动、重力场运动(多方向+碰撞检测+重力加速度+能量损失运动)拖拽运动)层层深入

    前言:         本人纯小白一个,有很多地方理解的没有各位大牛那么透彻,如有错误,请各位大牛指出斧正!小弟感激不尽.         本篇文章为您分析一下原生JS写加速度运动.弹性运动.重力场运 ...

  2. 第一百三十五节,JavaScript,封装库--拖拽

    JavaScript,封装库--拖拽 封装库新增1个拖拽方法 /** tuo_zhuai()方法,将一个弹窗元素实现拖拽功能 * 注意:一般需要在css文件将元素里的某一个区块光标设置成提示可以拖拽, ...

  3. react实现的点击拖拽元素效果

    之前用vue做日程管理组件的时候,用到了点击拖拽的效果,即点击元素,鼠标移动到哪里,元素移动到哪里,鼠标松开,拖拽停止,现在在弄react,于是也在想实现这个效果,经过一番折腾,效果出来了,代码如下: ...

  4. js实现音量拖拽的效果模拟

    <!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>js ...

  5. ToolStrip控件左右拖拽移动效果实现

    1.主窗体下部添加一个Panel乘放ToolStrip控件以实现ToolStrip在窗体下部定位.2.当ToolStrip控件中子控件超出屏幕时,拖动控件可以实现滑动效果.拖动到控件边缘距窗体边缘1/ ...

  6. reactnative实现qq聊天消息气泡拖拽消失效果

    前言(可跳过) 我在开发自己的APP时遇到了一个类似于qq聊天消息气泡拖拽消息的需求,因为在网上没有找到相关的组件,所以自己动手实现了一下 需求:对聊天消息气泡拖拽到一定长度松开时该气泡会消失(可自行 ...

  7. 拖拽系列一、JavaScript实现简单的拖拽效果

        前端拖拽相关应用汇总 在现实生活中就像男孩子牵着(拖着)女朋友的手穿过马路:从马路的一端走到另一端这种场景很常见: 而在前端开发中拖拽效果也算是前端开发中应用最常见.最普遍的特效:其拖拽涉及知 ...

  8. 拖拽碰撞效果,高级浏览器下全部搞定(ie6-8还没有搞定)

    <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...

  9. JavaScript小实例:拖拽应用(二)

    经常在网站别人的网站的注册页中看到一个拖拽验证的效果,就是它的验证码刚开始不出来,而是有一个拖拽的条,你必须将这个拖拽条拖到底,验证码才出来,说了感觉跟没说一样,你还是不理解,好吧,我给个图你看看: ...

随机推荐

  1. Git版本控制工具安装与配置

    这里太多,我写在这里方便复制: sudo yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-dev ...

  2. django开发项目的部署nginx

    Django 部署(Nginx) 本文主要讲解 nginx + uwsgi socket 的方式来部署 Django,比 Apache mod_wsgi 要复杂一些,但这是目前主流的方法. 1. 运行 ...

  3. js判断浏览器的类型和获得浏览器的版本

    <!DOCTYPE html><html>    <head>        <meta charset="UTF-8">      ...

  4. 团队 作业6--展示(alpha阶段)

    团队作业6--展示博客(alpha阶段) 一.团队信息 团队码云地址: https://gitee.com/kezhiqing/soft_team_blog 成员介绍: 个人博客地址 团队成员 个人博 ...

  5. PHP保存Base64图片base64_decode的问题 文件打不开的问题

      PHP对Base64的支持非常好,有内置的base64_encode与base64_decode负责图片的Base64编码与解码. 编码上,只要将图片流读取到,而后使用base64_encode进 ...

  6. bzoj3629 / P4397 [JLOI2014]聪明的燕姿

    P4397 [JLOI2014]聪明的燕姿 根据唯一分解定理 $n=q_{1}^{p_{1}}*q_{2}^{p_{2}}*q_{3}^{p_{3}}*......*q_{m}^{p_{m}}$ 而$ ...

  7. vue.js指令v-model实现方法

    原文链接:http://www.jb51.net/article/99097.htm V-MODEL 是VUE 的一个指令,在input 控件上使用时,可以实现双向绑定. 通过看文档,发现他不过是一个 ...

  8. JS封装简单后代选择器

    大概思路是这样的:通过判断传过来的参数是什么类型,如果是对象,那这里就是this(因为封装是自己用的,肯定不会随便乱传一个对象过来),如果是一个函数(匿名函数),那就是Dom加载(这里先不讲),如果是 ...

  9. 【安装】Nginx安装

    系统平台:CentOS release 6.5 (Final) 64位. 安装编译工具及库文件 yum -y install make zlib zlib-devel gcc-c++ libtool ...

  10. 调用libpci库出现的问题和解决方法

    调用libpci库出现的问题和解决方法   本方案以pciutils-3.5.1为例.   1. 从以下地址下载pciutils-3.5.1.tar.xz https://www.kernel.org ...