拖放 - JQuery插件

时间:2011-11-19 16:27:26

标签: javascript jquery math drag-and-drop

我正在尝试创建自己的拖放插件。

我的插件:

$.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

1 个答案:

答案 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
});