javascript拖拽原理与简单实现方法[demo]
美国人有一句常用的俗语—“Re-inventing the Wheel”,从字面上来解释就是“重新发明轮子”。可是轮子早已问世,再要去发明岂非劳而无功?
产品经理发下需求,实施者再到网上搜索代码,也许很快就搜到对应的代码。简单的交互和提交常用的交互,很容易的网上找到相应的代码。一些复杂的交互、定制行比较强的交互,网上找代码就有些困难的。所有复杂交互都是简单交互的组成,所以搜索别人的代码是以学习为主,把别人的基础方法掌握了。拿到需求就不必要到网上搜代码,这样永远也不能提升自己的能力。
业余时间写的一个,简单拖拽框架代码,但比较容易扩展。
源码下载:http://yunpan.cn/QGYBju4vcRxZz
例子:
源码:
1 /**
2 * jQuery拖拽
3 * @author: heshimeng1987@qq.com
4 */
5 ~function($, window, undefined){
6 var win = $(window),
7 doc = $(document),
8
9 drag = function(target, options){
return new drag.fn.init(target, options);
};
drag.fn = drag.prototype = {
init: function(target, options){
var that = this;
this.target = $(target);
options = options || {};
this.root = options.root ? $(options.root) : this.target;
this.min = options.min;
this.max = options.max;
this.start = options.start;
this.move = options.move;
this.end = options.end;
// this.fixed = options.fixed === undefined ? true : options.fixed;
this.startPosition = {};
this.movePosition = {};
var _down = function(e){
that.startPosition = {x: e.clientX-parseInt(that.root.css('left')),
y: e.clientY-parseInt(that.root.css('top'))};
that.start&&that.start(that.startPosition);
doc.bind('mousemove', _move)
.bind('mouseup', _end);
return false;
},
_move = function(e){
that.movePosition = {x: e.clientX - that.startPosition.x,
y: e.clientY - that.startPosition.y};
that.limit();
that.root.css({
left: that.movePosition.x,
top: that.movePosition.y
});
that.move&&that.move(that.movePosition);
return false;
},
_end = function(){
doc.unbind('mousemove', _move)
.unbind('mouseup', _end);
that.end&&that.end(that.movePosition);
return false;
};
this.target.bind('mousedown',_down);
},
/**
* 移动的位置限制
*/
limit: function(){
if(this.min !== undefined){
this.movePosition = {
x: Math.max( this.min.x, this.movePosition.x ),
y: Math.max( this.min.y, this.movePosition.y )
};
}
if(this.max !== undefined ){
this.movePosition = {
x: Math.min( this.max.x, this.movePosition.x ),
y: Math.min( this.max.y, this.movePosition.y )
};
}
}
};
drag.fn.init.prototype = drag.fn;
$.drag = drag;
}(jQuery, this);
后续将制作一个完善的对话框功能,
当然也可以扩展一些小功能。比如,我工作中编写了一个身高拖拽表单,提供一个效果,这里就不提供源码了:

转载请注明出处:http://www.cnblogs.com/dreamback
如有任何建议或疑问,欢迎留言讨论。
.root{width: 280px;position: absolute;background:#ccc;top:450px;left:100px;font-size: 12px;}
.target{height: 32px;line-height: 32px;margin: 0;background:blue;cursor: move;padding-left: 10px;color:#fff;}
#target1{cursor: move;}
#target3,#target2{margin:0}
例子1.
$.drag('#target1');
例子2.
$.drag('#target2',{ root:'#root2' });
例子3.
最小范围:min:{x:100,y:10}
最大范围:max:{x:900,y:2000}
开始:false
移动:false
结束:false
$.drag('#target3',
{
root:'#root3',
min:{x:100,y:10},
max:{x:900,y:2000},
start: function(pos){
$('#isEnd').html('false');
$('#isStart').html('true, x='+pos.x+', y='+pos.y);
},
move: function(pos){
$('#isMove').html('true, x='+pos.x+', y='+pos.y);
},
end: function(pos){
$('#isEnd').html('true, x='+pos.x+', y='+pos.y);
$('#isStart').html('false');
$('#isMove').html('false');
}
});
javascript拖拽原理与简单实现方法[demo]的更多相关文章
- Javascript 拖拽的一些简单的应用——逐行分析代码,让你轻松了解拖拽的原理
今天我们来看看如何让拖拽的物体不能拖出某个div之外和拖拽的吸附功能 上次讲到我们的拖拽是不可拖出可视区范围的,在这基础上我们加个父级的div,不让他拖出父级.原理和之前的一样,简单吧. <di ...
- js拖拽原理及简单实现(渣渣自学)
第一步 首先简单分析下需求吧,我们就是想实现鼠标拖拽带颜色的方块时,让方块停留在鼠标松开的位置,需要计算的就是拖拽前的坐标和拖拽后的坐标,鼠标移动后相对于原位置的偏移量=目标元素的偏移量,根据这个等式 ...
- Javascript 拖拽的一些高级的应用——逐行分析代码,让你轻松了解拖拽的原理
我们看看之前的拖拽在周围有东西的时候会出现什么问题? 在高级浏览器中不会有啥问题,我们放到IE7下面测试一下,问题就出来了.如图 我们可以很清楚的看到,文字都已经被选中了.那这个用户体验很不好,用起来 ...
- Javascript 拖拽雏形中的一些问题——逐行分析代码,让你轻松了解拖拽的原理
今天我们就来解决上一次拖拽雏形中的一些问题.下面看看有哪些问题? 附上上期的Javascript代码,方便大家查看问题. <script type="text/javascript&q ...
- javascript——拖拽(完整兼容代码)
拖拽,是JS经常会用到的效果,在网上有很多的这样那样的拖拽效果,但其中往往大多有各种各养的问题,功能不全,无法兼容,而且修改的时候 也是十分麻烦. 其实拖拽的原理很简单,无非是鼠标的三个动作的解析,以 ...
- Android4.0 Launcher拖拽原理分析
在Android4.0源码自带的Launcher中,拖拽是由DragController进行控制的. 1) 先来看看类之间的继承关系 2)再来看看Launcher拖拽流程的时序图 1.基本流程: ...
- Javascript 拖拽雏形——逐行分析代码,让你轻松了解拖拽的原理
拖拽的原理: 其实就是鼠标与左上角的距离保持不变.我们来看下图, 这红点就是鼠标. 拖拽拖拽实际上来说就是通过鼠标的位置来计算物体的位置,就是这么简单,就是这么任性. 那这个距离怎么求呢?? 鼠标的位 ...
- JS鼠标的拖拽原理
拖拽功能主要是用在让用户做一些自定义的动作,比如拖动排序,弹出框拖动移动等等,效果还是蛮不错的.下面讲解一下拖拽的原理,希望可以帮助到有需要的朋友! 一.拖拽的流程动作①鼠标按下②鼠标移动③鼠标松开 ...
- js拖拽原理和碰撞原理
拖拽的原理onmousedown 选择元素onmousemove 移动元素onmouseup 释放元素 1:如果拖拽的时候有文字:被选中,会产生问题原因:当鼠标按下的时如果页面中有文字或者图片被选中的 ...
随机推荐
- Python—集合(在我的世界,你就是唯一)
一.概念与定义 集合类型与数学中集合的概念一致,即包含0个或多个数据项的无序组合. 元素不可重复,只能是固定数据类型元素. 集合(set)属于Python无序可变序列,使用一对大括号作为定界符,元素之 ...
- 20172332 实验一《Java开发环境的熟悉》实验报告
20172332 2017-2018-2 <程序设计与数据结构>实验一报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 于欣月 学号:20172332 实验教师:王 ...
- 2d命令行小游戏源码
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 认识简单的C
- JVM(二)GC
GC简介 Java堆内存 在运行时,java的实例被存放在堆内存区域.当一个对象不在被引用,满足条件就会从堆内存移除并且内存空间被回收.堆内存由三个主要区域 1.新生代 Eden空间(任何实例 ...
- Calendar简单用法
- Matlab中fspecial的用法【转】
Fspecial函数用于创建预定义的滤波算子,其语法格式为:h = fspecial(type)h = fspecial(type,parameters,sigma) 参数type制定算子类型,par ...
- Matlab 之 im2col 【转】
函数原型: B=im2col(A,[m n],block_type) 功能:将矩阵A分为m×n的子矩阵,再将每个子矩阵作为B的一列 (1)当block_type为distinct时,将A分解为互不重叠 ...
- RT-thread内核之邮箱
一.邮箱控制块:在include/rtdef.h中 #ifdef RT_USING_MAILBOX /** * mailbox structure */ struct rt_mailbox { str ...
- C# 大文件的复制方法
如何复制读取大文件,也许困惑了很多人很长时间,这个不知道怎么搞,的确让人头疼欲裂,知道了你就才发现原来那么简单,话不多说,直入正题```` static void Main(string[] args ...