我正在尝试创建自己的拖放插件。
我的插件:
$.fn.drag = function(options) {
var defaults = {
revert: false,
onDrag: function() {},
onDrop: function() {}
};
var o = $.extend(defaults, options);
return this.each(function() {
var position = $(this).position();
var ptop = position.top;
var pleft = position.left;
var down = false;
$(this).mousedown(function(event) {
down = true;
$(this).css({
cursor: 'move',
}).mousemove(function(event) {
if (down == true) {
$(this).css({
cursor: 'move',
});
var w = $(this).width();
var h = $(this).height();
var left3 = (w / 2) + 7;
var top3 = (h / 2) + 7;
$(this).css({
cursor: 'move',
left: (event.clientX) + (3 * 3) - left3,
top: (event.clientY) + (3 * 3) - top3
});
}
}).bind('mousemove', o.onDrag).mouseup(function() {
down = false;
$(this).css({
cursor: 'default',
});
if (o.revert == true) {
$(this).animate({
top: ptop,
left: pleft
}, 300);
} else {}
}).bind('mouseup', o.onDrop);
});
});
}
我的问题:当我尝试拖动匹配的元素时,它将光标居中。我是故意这样做的,因为我不知道如何制作它,所以如果我点击它将拖动的元素的任何部分。正如您所见here
将Cursor置于元素代码中:
var w = $(this).width();
var h = $(this).height();
var left3 = (w / 2) + 7;
var top3 = (h / 2) + 7;
$(this).css({
cursor: 'move',
left: (event.clientX) + (3 * 3) - left3,
top: (event.clientY) + (3 * 3) - top3
});
有没有办法不将光标置于元素内部,并且可以在任何单击的位置拖动元素?
提前致谢:D
答案 0 :(得分:3)
当您mousemove
编辑mousedown
时,可以跟踪光标位置的差异,并适当地应用此数据:http://jsfiddle.net/BggPn/15/。
$(this).mousedown(function(event) {
down = true;
var dx = event.pageX - $(this).position().left, // difference from left border
dy = event.pageY - $(this).position().top; // difference from top border
和
$(this).css({
cursor: 'move', // you had set the cursor already by the way
left: event.pageX - dx, // set left border to cursor x position minus difference
top: event.pageY - dy // set top border to cursor y position minus difference
});