1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- (function($){
- var O = 'opacity',
- C = 'CursorMove',
- M = 'mousemove.drag',
- U = 'mouseup.drag',
- D = 'mousedown.drag',
- W = $(window),
- A = $(document),
- timer = null,
- E = function () {
- this.w.css(O, 1);
- A.unbind(M+' '+U);
- },
- G = function (e) {
- var m = this,
- p = m.w.offset(),
- t = p.top,
- l = p.left,
- r = W.width() - m.w.outerWidth(),
- b = W.height() - m.w.outerHeight(),
- X = e.pageX,
- Y = e.pageY,
- x = m.p.left + (X - m.x) - W.scrollLeft(),
- y = m.p.top + (Y - m.y) - W.scrollTop();
- //以下逻辑保证在可视范围内移动
- if (l <= 0 && X < m.x)
- {
- x = 0;
- m.x = Math.max(X, 0);
- m.p.left = 0;
- }
- if (t <= 0 && Y < m.y)
- {
- y = 0;
- m.y = Math.max(Y, 0);
- m.p.top = 0;
- }
- if (r <= l - A.scrollLeft() && X > m.x)
- {
- x = r;
- m.x = Math.min(X, r);
- m.p.left = r;
- }
- if (b <= t - A.scrollLeft() && Y > m.y)
- {
- y = b;
- m.y = Math.min(Y, b);
- m.p.top = b;
- }
- m.w.css({ left : x, top : y });
- return false;
- },
- S = function (e, m) {
- e.preventDefault();
- m = this;
- m.w.css(O, 0.8);
- m.p = m.w.offset();
- m.x = e.pageX;
- m.y = e.pageY;
- A.bind(M, $.proxy(G, m)).bind(U, $.proxy(E, m));
- };
- $.fn.Drag = function(o){
- return this.each(function () {
- var e = $(this),
- x = function () {
- this.h = o ? (typeof o === 'string' ? $(o, e[0]) : o) : e;
- this.w = e;
- return this;
- },
- X = new x();
- e.data('__h', X.h);
- X.h.addClass(C).unbind(D).bind(D, $.proxy(S, X));
- });
- };
- $.fn.unDrag = function () {
- return this.each(function(){
- ($(this).data('__h') || $()).removeClass(C).unbind(D);
- });
- };
- })($);
|