diff --git a/jquery.tiny-draggable.js b/jquery.tiny-draggable.js index 5835fcf..be98398 100644 --- a/jquery.tiny-draggable.js +++ b/jquery.tiny-draggable.js @@ -1,5 +1,5 @@ -/* - jQuery tinyDraggable v1.0.2 +/*; + jQuery tinyDraggable v1.0.3 Copyright (c) 2014 Simon Steinberger / Pixabay GitHub: https://github.com/Pixabay/jQuery-tinyDraggable More info: http://pixabay.com/blog/posts/p-52/ @@ -10,16 +10,29 @@ $.fn.tinyDraggable = function(options){ var settings = $.extend({ handle: 0, exclude: 0 }, options); return this.each(function(){ - var dx, dy, el = $(this), handle = settings.handle ? $(settings.handle, el) : el; + var dx, dy, el = $(this), doc = $(document), handle = settings.handle ? $(settings.handle, el) : el; handle.on({ mousedown: function(e){ if (settings.exclude && ~$.inArray(e.target, $(settings.exclude, el))) return; + if (settings.callback && settings.callback('start', e.pageX, e.pageY) === false) return; + e.preventDefault(); var os = el.offset(); dx = e.pageX-os.left, dy = e.pageY-os.top; - $(document).on('mousemove.drag', function(e){ el.offset({top: e.pageY-dy, left: e.pageX-dx}); }); - }, - mouseup: function(e){ $(document).off('mousemove.drag'); } + + function onDrag(e){ + var x = e.pageX-dx, y = e.pageY-dy; + if (!settings.callback || settings.callback('drag', x, y) !== false) { + el.offset({top: y, left: x}); + } + } + function onStop(e){ + if (settings.callback && settings.callback('stop', e.pageX, e.pageY) === false) return; + doc.off('mousemove.drag', onDrag).off('mouseup', onStop); + } + + doc.on('mousemove.drag', onDrag).on('mouseup', onStop); + } }); }); - } + }; }(jQuery)); diff --git a/jquery.tiny-draggable.min.js b/jquery.tiny-draggable.min.js index f3c0da8..2066901 100644 --- a/jquery.tiny-draggable.min.js +++ b/jquery.tiny-draggable.min.js @@ -1,3 +1,3 @@ -// jQuery tinyDraggable v1.0.2 +// jQuery tinyDraggable v1.0.3 // https://github.com/Pixabay/jQuery-tinyDraggable -!function(e){e.fn.tinyDraggable=function(n){var t=e.extend({handle:0,exclude:0},n);return this.each(function(){var n,o,u=e(this),a=t.handle?e(t.handle,u):u;a.on({mousedown:function(a){if(!t.exclude||!~e.inArray(a.target,e(t.exclude,u))){a.preventDefault();var f=u.offset();n=a.pageX-f.left,o=a.pageY-f.top,e(document).on("mousemove.drag",function(e){u.offset({top:e.pageY-o,left:e.pageX-n})})}},mouseup:function(){e(document).off("mousemove.drag")}})})}}(jQuery); +(function(a){a.fn.tinyDraggable=function(n){var b=a.extend({handle:0,exclude:0},n);return this.each(function(){var f,g,d=a(this),h=a(document);(b.handle?a(b.handle,d):d).on({mousedown:function(c){function k(e){var a=e.pageX-f;e=e.pageY-g;b.callback&&!1===b.callback("drag",a,e)||d.offset({top:e,left:a})}function l(a){b.callback&&!1===b.callback("stop",a.pageX,a.pageY)||h.off("mousemove.drag",k).off("mouseup",l)}if(!b.exclude||!~a.inArray(c.target,a(b.exclude,d)))if(!b.callback||!1!==b.callback("start",c.pageX,c.pageY)){c.preventDefault();var m=d.offset();f=c.pageX-m.left;g=c.pageY-m.top;h.on("mousemove.drag",k).on("mouseup",l)}}})})}})(jQuery);