354 lines
11 KiB
JavaScript
354 lines
11 KiB
JavaScript
|
|
/**
|
|||
|
|
* jQuery ligerUI 1.3.2
|
|||
|
|
*
|
|||
|
|
* http://ligerui.com
|
|||
|
|
*
|
|||
|
|
* Author daomi 2015 [ gd_star@163.com ]
|
|||
|
|
*
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
(function ($)
|
|||
|
|
{
|
|||
|
|
var l = $.ligerui;
|
|||
|
|
|
|||
|
|
$.fn.ligerDrag = function (options)
|
|||
|
|
{
|
|||
|
|
return l.run.call(this, "ligerDrag", arguments,
|
|||
|
|
{
|
|||
|
|
idAttrName: 'ligeruidragid', hasElement: false, propertyToElemnt: 'target'
|
|||
|
|
}
|
|||
|
|
);
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
$.fn.ligerGetDragManager = function ()
|
|||
|
|
{
|
|||
|
|
return l.run.call(this, "ligerGetDragManager", arguments,
|
|||
|
|
{
|
|||
|
|
idAttrName: 'ligeruidragid', hasElement: false, propertyToElemnt: 'target'
|
|||
|
|
});
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
$.ligerDefaults.Drag = {
|
|||
|
|
onStartDrag: false,
|
|||
|
|
onDrag: false,
|
|||
|
|
onStopDrag: false,
|
|||
|
|
handler: null,
|
|||
|
|
//鼠标按下再弹起,如果中间的间隔小于[dragDelay]毫秒,那么认为是点击,不会进行拖拽操作
|
|||
|
|
clickDelay : 100,
|
|||
|
|
//代理 拖动时的主体,可以是'clone'或者是函数,放回jQuery 对象
|
|||
|
|
proxy: true,
|
|||
|
|
revert: false,
|
|||
|
|
animate: true,
|
|||
|
|
onRevert: null,
|
|||
|
|
onEndRevert: null,
|
|||
|
|
//接收区域 jQuery对象或者jQuery选择字符
|
|||
|
|
receive: null,
|
|||
|
|
//进入区域
|
|||
|
|
onDragEnter: null,
|
|||
|
|
//在区域移动
|
|||
|
|
onDragOver: null,
|
|||
|
|
//离开区域
|
|||
|
|
onDragLeave: null,
|
|||
|
|
//在区域释放
|
|||
|
|
onDrop: null,
|
|||
|
|
disabled: false,
|
|||
|
|
proxyX: null, //代理相对鼠标指针的位置,如果不设置则对应target的left
|
|||
|
|
proxyY: null
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
|
|||
|
|
l.controls.Drag = function (options)
|
|||
|
|
{
|
|||
|
|
l.controls.Drag.base.constructor.call(this, null, options);
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
l.controls.Drag.ligerExtend(l.core.UIComponent, {
|
|||
|
|
__getType: function ()
|
|||
|
|
{
|
|||
|
|
return 'Drag';
|
|||
|
|
},
|
|||
|
|
__idPrev: function ()
|
|||
|
|
{
|
|||
|
|
return 'Drag';
|
|||
|
|
},
|
|||
|
|
_render: function ()
|
|||
|
|
{
|
|||
|
|
var g = this, p = this.options;
|
|||
|
|
this.set(p);
|
|||
|
|
g.cursor = "move";
|
|||
|
|
g.handler.css('cursor', g.cursor);
|
|||
|
|
g.mouseDowned = false;
|
|||
|
|
g.handler.bind('mousedown.drag', function (e)
|
|||
|
|
{
|
|||
|
|
if (p.disabled) return;
|
|||
|
|
if (e.button == 2) return;
|
|||
|
|
g.mouseDowned = true;
|
|||
|
|
$(document).bind("selectstart.drag", function () { return false; });
|
|||
|
|
setTimeout(function ()
|
|||
|
|
{
|
|||
|
|
//如果过了N毫秒,鼠标还没有弹起来,才认为是启动drag
|
|||
|
|
if (g.mouseDowned)
|
|||
|
|
{
|
|||
|
|
g._start.call(g, e);
|
|||
|
|
}
|
|||
|
|
}, p.clickDelay || 100);
|
|||
|
|
}).bind('mousemove.drag', function ()
|
|||
|
|
{
|
|||
|
|
if (p.disabled) return;
|
|||
|
|
g.handler.css('cursor', g.cursor);
|
|||
|
|
}).bind('mouseup.drag', function ()
|
|||
|
|
{
|
|||
|
|
$(document).unbind("selectstart.drag");
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
$(document).bind('mouseup', function ()
|
|||
|
|
{
|
|||
|
|
g.mouseDowned = false;
|
|||
|
|
});
|
|||
|
|
},
|
|||
|
|
_rendered: function ()
|
|||
|
|
{
|
|||
|
|
this.options.target.ligeruidragid = this.id;
|
|||
|
|
},
|
|||
|
|
_start: function (e)
|
|||
|
|
{
|
|||
|
|
var g = this, p = this.options;
|
|||
|
|
if (g.reverting) return;
|
|||
|
|
if (p.disabled) return;
|
|||
|
|
g.current = {
|
|||
|
|
target: g.target,
|
|||
|
|
left: g.target.offset().left,
|
|||
|
|
top: g.target.offset().top,
|
|||
|
|
startX: e.pageX || e.screenX,
|
|||
|
|
startY: e.pageY || e.clientY
|
|||
|
|
};
|
|||
|
|
if (g.trigger('startDrag', [g.current, e]) == false) return false;
|
|||
|
|
g.cursor = "move";
|
|||
|
|
g._createProxy(p.proxy, e);
|
|||
|
|
//代理没有创建成功
|
|||
|
|
if (p.proxy && !g.proxy) return false;
|
|||
|
|
(g.proxy || g.handler).css('cursor', g.cursor);
|
|||
|
|
$(document).bind('mousemove.drag', function ()
|
|||
|
|
{
|
|||
|
|
g._drag.apply(g, arguments);
|
|||
|
|
});
|
|||
|
|
l.draggable.dragging = true;
|
|||
|
|
$(document).bind('mouseup.drag', function ()
|
|||
|
|
{
|
|||
|
|
l.draggable.dragging = false;
|
|||
|
|
g._stop.apply(g, arguments);
|
|||
|
|
});
|
|||
|
|
},
|
|||
|
|
_drag: function (e)
|
|||
|
|
{
|
|||
|
|
var g = this, p = this.options;
|
|||
|
|
if (!g.current) return;
|
|||
|
|
var pageX = e.pageX || e.screenX;
|
|||
|
|
var pageY = e.pageY || e.screenY;
|
|||
|
|
g.current.diffX = pageX - g.current.startX;
|
|||
|
|
g.current.diffY = pageY - g.current.startY;
|
|||
|
|
(g.proxy || g.handler).css('cursor', g.cursor);
|
|||
|
|
if (g.receive)
|
|||
|
|
{
|
|||
|
|
g.receive.each(function (i, obj)
|
|||
|
|
{
|
|||
|
|
var receive = $(obj);
|
|||
|
|
var xy = receive.offset();
|
|||
|
|
if (pageX > xy.left && pageX < xy.left + receive.width()
|
|||
|
|
&& pageY > xy.top && pageY < xy.top + receive.height())
|
|||
|
|
{
|
|||
|
|
if (!g.receiveEntered[i])
|
|||
|
|
{
|
|||
|
|
g.receiveEntered[i] = true;
|
|||
|
|
g.trigger('dragEnter', [obj, g.proxy || g.target, e]);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
g.trigger('dragOver', [obj, g.proxy || g.target, e]);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if (g.receiveEntered[i])
|
|||
|
|
{
|
|||
|
|
g.receiveEntered[i] = false;
|
|||
|
|
g.trigger('dragLeave', [obj, g.proxy || g.target, e]);
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
if (g.hasBind('drag'))
|
|||
|
|
{
|
|||
|
|
if (g.trigger('drag', [g.current, e]) != false)
|
|||
|
|
{
|
|||
|
|
g._applyDrag();
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
if (g.proxy)
|
|||
|
|
{
|
|||
|
|
g._removeProxy();
|
|||
|
|
} else
|
|||
|
|
{
|
|||
|
|
g._stop();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
g._applyDrag();
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
_stop: function (e)
|
|||
|
|
{
|
|||
|
|
var g = this, p = this.options;
|
|||
|
|
$(document).unbind('mousemove.drag');
|
|||
|
|
$(document).unbind('mouseup.drag');
|
|||
|
|
$(document).unbind("selectstart.drag");
|
|||
|
|
if (g.receive)
|
|||
|
|
{
|
|||
|
|
g.receive.each(function (i, obj)
|
|||
|
|
{
|
|||
|
|
if (g.receiveEntered[i])
|
|||
|
|
{
|
|||
|
|
g.trigger('drop', [obj, g.proxy || g.target, e]);
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
if (g.proxy)
|
|||
|
|
{
|
|||
|
|
if (p.revert)
|
|||
|
|
{
|
|||
|
|
if (g.hasBind('revert'))
|
|||
|
|
{
|
|||
|
|
if (g.trigger('revert', [g.current, e]) != false)
|
|||
|
|
g._revert(e);
|
|||
|
|
else
|
|||
|
|
g._removeProxy();
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
g._revert(e);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
g._applyDrag(g.target);
|
|||
|
|
g._removeProxy();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
g.cursor = 'move';
|
|||
|
|
g.trigger('stopDrag', [g.current, e]);
|
|||
|
|
g.current = null;
|
|||
|
|
g.handler.css('cursor', g.cursor);
|
|||
|
|
},
|
|||
|
|
_revert: function (e)
|
|||
|
|
{
|
|||
|
|
var g = this;
|
|||
|
|
g.reverting = true;
|
|||
|
|
g.proxy.animate({
|
|||
|
|
left: g.current.left,
|
|||
|
|
top: g.current.top
|
|||
|
|
}, function ()
|
|||
|
|
{
|
|||
|
|
g.reverting = false;
|
|||
|
|
g._removeProxy();
|
|||
|
|
g.trigger('endRevert', [g.current, e]);
|
|||
|
|
g.current = null;
|
|||
|
|
});
|
|||
|
|
},
|
|||
|
|
_applyDrag: function (applyResultBody)
|
|||
|
|
{
|
|||
|
|
var g = this, p = this.options;
|
|||
|
|
applyResultBody = applyResultBody || g.proxy || g.target;
|
|||
|
|
var cur = {}, changed = false;
|
|||
|
|
var noproxy = applyResultBody == g.target;
|
|||
|
|
if (g.current.diffX)
|
|||
|
|
{
|
|||
|
|
if (noproxy || p.proxyX == null)
|
|||
|
|
cur.left = g.current.left + g.current.diffX;
|
|||
|
|
else
|
|||
|
|
cur.left = g.current.startX + p.proxyX + g.current.diffX;
|
|||
|
|
changed = true;
|
|||
|
|
}
|
|||
|
|
if (g.current.diffY)
|
|||
|
|
{
|
|||
|
|
if (noproxy || p.proxyY == null)
|
|||
|
|
cur.top = g.current.top + g.current.diffY;
|
|||
|
|
else
|
|||
|
|
cur.top = g.current.startY + p.proxyY + g.current.diffY;
|
|||
|
|
changed = true;
|
|||
|
|
}
|
|||
|
|
if (applyResultBody == g.target && g.proxy && p.animate)
|
|||
|
|
{
|
|||
|
|
g.reverting = true;
|
|||
|
|
applyResultBody.animate(cur, function ()
|
|||
|
|
{
|
|||
|
|
g.reverting = false;
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
applyResultBody.css(cur);
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
_setReceive: function (receive)
|
|||
|
|
{
|
|||
|
|
this.receiveEntered = {};
|
|||
|
|
if (!receive) return;
|
|||
|
|
if (typeof receive == 'string')
|
|||
|
|
this.receive = $(receive);
|
|||
|
|
else
|
|||
|
|
this.receive = receive;
|
|||
|
|
},
|
|||
|
|
_setHandler: function (handler)
|
|||
|
|
{
|
|||
|
|
var g = this, p = this.options;
|
|||
|
|
if (!handler)
|
|||
|
|
g.handler = $(p.target);
|
|||
|
|
else
|
|||
|
|
g.handler = (typeof handler == 'string' ? $(handler, p.target) : handler);
|
|||
|
|
},
|
|||
|
|
_setTarget: function (target)
|
|||
|
|
{
|
|||
|
|
this.target = $(target);
|
|||
|
|
},
|
|||
|
|
_setCursor: function (cursor)
|
|||
|
|
{
|
|||
|
|
this.cursor = cursor;
|
|||
|
|
(this.proxy || this.handler).css('cursor', cursor);
|
|||
|
|
},
|
|||
|
|
_createProxy: function (proxy, e)
|
|||
|
|
{
|
|||
|
|
if (!proxy) return;
|
|||
|
|
var g = this, p = this.options;
|
|||
|
|
if (typeof proxy == 'function')
|
|||
|
|
{
|
|||
|
|
g.proxy = proxy.call(this.options.target, g, e);
|
|||
|
|
}
|
|||
|
|
else if (proxy == 'clone')
|
|||
|
|
{
|
|||
|
|
g.proxy = g.target.clone().css('position', 'absolute');
|
|||
|
|
g.proxy.appendTo('body');
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
g.proxy = $("<div class='l-draggable'></div>");
|
|||
|
|
g.proxy.width(g.target.width()).height(g.target.height())
|
|||
|
|
g.proxy.attr("dragid", g.id).appendTo('body');
|
|||
|
|
}
|
|||
|
|
g.proxy.css({
|
|||
|
|
left: p.proxyX == null ? g.current.left : g.current.startX + p.proxyX,
|
|||
|
|
top: p.proxyY == null ? g.current.top : g.current.startY + p.proxyY
|
|||
|
|
}).show();
|
|||
|
|
},
|
|||
|
|
_removeProxy: function ()
|
|||
|
|
{
|
|||
|
|
var g = this;
|
|||
|
|
if (g.proxy)
|
|||
|
|
{
|
|||
|
|
g.proxy.remove();
|
|||
|
|
g.proxy = null;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
})(jQuery);
|