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

  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 }

 

 

转载于:https://www.cnblogs.com/wuniaoheart/p/3159061.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/494013.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

语义分割领域开山之作:Google提出用神经网络搜索实现语义分割

来源&#xff1a; AI科技评论1. Introduction在 arxiv 浏览论文的时候&#xff0c;单独看文章名不知道属于 CV 哪个领域&#xff0c;怀着对一作 Liang-Chieh 敬畏的心&#xff0c;在摘要中扫描到 PASCAL VOC 2012 (semantic image segmentation)&#xff0c;浏览全文才明白&…

美国发布《评估和强化制造与国防工业基础及供应链弹性》报告

来源&#xff1a;蓝海星智库10月5日&#xff0c;美国发布《评估和强化制造与国防工业基础及供应链弹性》非密版报告&#xff0c;这是特朗普第13806号行政令要求的&#xff0c;由国防部工业政策办公室领导&#xff0c;商务部、劳工部、能源部和国土安全部等多个政府部门参与&…

UVa10006-Carmichael Numbers

http://uva.onlinejudge.org/index.php?optioncom_onlinejudge&Itemid8&pageshow_problem&problem947 快速幂取模 code: #include <iostream> #include <cstring> #include <cmath> using namespace std; typedef long long LL; LL pow_mod(LL …

Android缓存学习入门(二)

本文主要包括以下内容 内存缓存策略 文件缓存策略 内存缓存策略 当有一个图片要去从网络下载的时候&#xff0c;我们并不会直接去从网络下载&#xff0c;因为在这个时代&#xff0c;用户的流量是宝贵的&#xff0c;耗流量的应用是不会得到用户的青睐的。那我们该怎么办呢&…

本届诺奖得主“牛”在哪儿?专业数据分析给出论文干货

来源&#xff1a;科技日报摘要&#xff1a;北京时间10月2日下午5时52分&#xff0c;2018年诺贝尔物理学奖揭晓。获奖者为美国科学家阿瑟阿什金&#xff08;Arthur Ashkin&#xff09;、法国科学家热拉尔穆鲁&#xff08;Gerard Mourou&#xff09;和加拿大科学家唐娜斯特里克兰…

码农老婆的网店

码农老婆的网店&#xff1a;清泓美肤苑 转载于:https://www.cnblogs.com/8090sns/p/3162690.html

130701基础练习-first

// 629.cpp : 定义控制台应用程序的入口点。// #include "stdafx.h"//#include <iostream.h> class Point{public: void OutPut() { int a2; printf("Please output a integer:\n"); printf("%d",a); scanf("%d",&a); }…

联合国发布AI报告:自动化和AI对亚洲有巨大影响【附报告下载】

来源&#xff1a;网易智能选自 | 联合国开发计划署编译 | nariiy、小小科技的飞速发展将深刻地影响社会变革&#xff0c;第四次工业革命以人工智能、自动化和生物科技等创新技术为代表&#xff0c;并将可能改变现有的生产、管理和治理体系&#xff0c;各国将如何接受并适应即将…

对PostgreSQL cmin和cmax的理解

看例子&#xff1a; 开两个终端来对比&#xff1a; 在终端A: [pgsqllocalhost bin]$ ./psql psql (9.1.2) Type "help" for help.pgsql# begin; BEGIN pgsql# select xmin,xmax,cmin,cmax,* from tab01;xmin | xmax | cmin | cmax | id | cd ---------------…

关于自动驾驶汽车法律政策的十点思考

来源&#xff1a;智车科技摘要&#xff1a;自动驾驶技术的发展将带来全面的社会和经济影响。历史地看&#xff0c;传统汽车成为了人们最主要的代步工具&#xff0c;塑造了如今的城市。那么&#xff0c;自动驾驶技术在重塑汽车的同时&#xff0c;也将塑造未来的城市和人类生活。…

数据结构之二叉堆

二叉堆的介绍 二叉堆是完全二元树或者是近似完全二元树&#xff0c;按照数据的排列方式可以分为两种&#xff1a;最大堆和最小堆。 最大堆&#xff1a;父结点的键值总是大于或等于任何一个子节点的键值&#xff1b; 最小堆&#xff1a;父结点的键值总是小于或等于任何一个子…

derby数据库操作比较难理解的错误及解决方法大全

一、插入&#xff08;INSERT时报错&#xff09; 1、错误&#xff1a;java.sql.SQLIntegrityConstraintViolationException: 列“test”无法接受空值。 可能原因&#xff1a;建表时test列为not null 但插入数据时给与了null值 2、错误&#xff1a;java.sql.SQLSyntaxErrorExcept…

手术革命:这三家公司如何用AR技术辅助医疗手术

来源&#xff1a;资本实验室作为一种重要的职业&#xff0c;外科医生特别是手术医生需要具备丰富的专业知识&#xff0c;还需要掌握精准的手术操作技术&#xff0c;这都需要不断的学习与练习。受学习资料、手术练习材料等软硬件条件的制约&#xff0c;医生进行手术学习和手术操…

C# Socket初探

闲着无聊&#xff0c;写了个简单的C/S Socket程序&#xff0c;功能很简单&#xff0c;服务器在9000端口监听socket接入&#xff0c;只要有接入&#xff0c;就发送"Welcome."消息给客户端。 代码分2块&#xff0c;server端&#xff1a; class Program{static void Mai…

最新发布 | 2018年度第八届吴文俊人工智能科学技术奖获奖名单公示

来源&#xff1a;人工智能人物摘要&#xff1a;2018年度第八届吴文俊人工智能科学技术奖评审工作已经完成。根据《吴文俊人工智能科学技术奖励条例》和《吴文俊人工智能科学技术奖励实施细则》相关规定&#xff0c;经全国各地方人工智能学会、各高校及科研院所、团体会员单位和…

ReactNative环境配置

参考链接 Windows系统安装React Native环境 windows下React Native Android 环境搭建 在Windows下搭建React Native Android开发环境 碰到的问题 react-native可能在cmd窗口提示不是内部或外部命令 解决方法&#xff1a;在nodeJS command prompt下可以运行 运行时卡在最…

qt.pro转成vs程序

今天下载了一个smarthome项目&#xff0c;界面用qml实现的&#xff0c; 想用vs编译生成.exe文件&#xff0c;在wince上运行 方法一&#xff08;vs命令行&#xff09;: 一: 打开vs 2008 命令行&#xff0c;进入smarthome目录下&#xff1a; 二: qmake生成 smarthome.vcproj工程…

DNA存储:这些公司正在开启数据存储的未来

来源&#xff1a;资本实验室随着数字化时代的到来&#xff0c;可以毫不夸张地说&#xff0c;数据存储与安全正在成为整个社会正常运行的基础。同时&#xff0c;物联网、人工智能、虚拟现实、自动驾驶等新技术的应用则进一步大幅提升了数据存储要求。据IDC预测&#xff0c;到202…

React基础语法学习

React主要有如下3个特点&#xff1a; 作为UI&#xff08;Just the UI&#xff09;虚拟DOM&#xff08;Virtual DOM&#xff09;:这是亮点 是React最重要的一个特性 放进内存 最小更新的视图,差异部分更新 diff算法数据流&#xff08;Date Flow&#xff09;单向数据流 学习Re…

C#中ListT用法

所属命名空间&#xff1a;System.Collections.Generic public classList<T> :IList<T>,ICollection<T>,IEnumerable<T>,IList,ICollection,IEnumerable List<T>类是ArrayList类的泛型等效类。该类使用大小可按需动态增加的数组实现IList<…