-
Notifications
You must be signed in to change notification settings - Fork 21
/
multidraggable.js
49 lines (49 loc) · 1.61 KB
/
multidraggable.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/**
* JQuery MultiDraggable Plugin
*
* Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
*
* Written by Sudheer Someshwara <[email protected]>
*
* MultiDraggable is a jQuery plugin which extends jQuery UI Draggable to add multi drag and live functionality.
*
**/
(function ($, undefined) {
$.fn.multiDraggable = function (opts) {
var initLeftOffset = []
,initTopOffset = [];
return this.each (function (){
$(this).live("mouseover", function() {
if (!$(this).data("init")) {
$(this).data("init", true).draggable(opts,{
start: function (event,ui) {
var pos = $(this).position();
$.each(opts.group || {}, function(key,value) {
var elemPos = $(value).position();
initLeftOffset[key] = elemPos.left - pos.left;
initTopOffset[key] = elemPos.top - pos.top;
});
opts.startNative ? opts.startNative() : {};
},
drag: function(event,ui) {
var pos = $(this).offset();
$.each(opts.group || {}, function(key,value) {
$(value).offset({left: pos.left + initLeftOffset[key],
top: pos.top + initTopOffset[key]});
});
opts.dragNative ? opts.dragNative() : {};
},
stop: function(event,ui) {
var pos = $(this).offset();
$.each(opts.group || {}, function(key,value) {
$(value).offset({left: pos.left + initLeftOffset[key],
top: pos.top + initTopOffset[key]});
});
opts.stopNative ? opts.stopNative() : {};
},
});
}
});
});
};
}(jQuery));