繁体   English   中英

轻巧的可拖动jQuery,拖动屏幕

[英]lightweight draggable jQuery, drag the screen

在线示例: http : //jsfiddle.net/5tpPx/问题是,如果将黑色方块和鼠标拖离红色方块区域,则一旦将鼠标移回红色方块区域,黑色方块就会跟随鼠标的移动。 如何解决? 就像一旦鼠标位于红色正方形区域的一侧,然后触发mouseup

  // jQuery draggable plugin
(function($) {
    $.fn.draggable = function(options) {
        var $handle = this,
            $draggable = this,
            draggable = $draggable[0];
            parent = draggable.parentNode;

        options = $.extend({}, {
            handle: null,
            cursor: 'move'
        }, options);

        if( options.handle ) {
            $handle = $(options.handle);
        }

        $handle
            .css('cursor', options.cursor)
            .on("mousedown", function(e) {
                var p_dims = parent.getBoundingClientRect(),
                    d_dims = draggable.getBoundingClientRect(),
                    w = p_dims.width-d_dims.width,
                    h = p_dims.height-d_dims.height;

                var x = d_dims.left - e.pageX,
                    y = d_dims.top - e.pageY,
                    z = $draggable.css('z-index');

                $draggable.css('z-index', 100000);

                $(document.documentElement)
                    .on('mousemove.draggable', function(e) {
                        var l = x+e.pageX-p_dims.left,
                            t = y+e.pageY-p_dims.top;
                        if (l < 0) l = 0;
                        else if (l > w) l = w;
                        if (t < 0) t = 0;
                        else if (t > h) t = h;
                        console.log(l, t);
                        $draggable.offset({
                            left: l+p_dims.left,
                            top: t+p_dims.top
                        });
                    })
                    .one('mouseup', function() {
                        $(this).off('mousemove.draggable');
                        $draggable.css('z-index', z);
                    });

                // disable selection
                e.preventDefault();
            });
    };
})(jQuery);

$('.drag').draggable();

我已经更新了您的代码http://jsfiddle.net/5tpPx/3/

在离开父容器时添加了一个类dragoff ,仅在再次触发mousedown事件时才将其删除。

在设置其坐标之前还检查了句柄是否具有类拖拽。

// jQuery draggable plugin
(function($) {
    $.fn.draggable = function(options) {
        var $handle = this,
            $draggable = this,
            draggable = $draggable[0];
            parent = draggable.parentNode;

        options = $.extend({}, {
            handle: null,
            cursor: 'move'
        }, options);

        if( options.handle ) {
            $handle = $(options.handle);
        }


        $handle
            .css('cursor', options.cursor)
            .on("mousedown", function(e) {
                $handle.removeClass('dragoff')
                var p_dims = parent.getBoundingClientRect(),
                    d_dims = draggable.getBoundingClientRect(),
                    w = p_dims.width-d_dims.width,
                    h = p_dims.height-d_dims.height;

                var x = d_dims.left - e.pageX,
                    y = d_dims.top - e.pageY,
                    z = $draggable.css('z-index');

                $draggable.css('z-index', 100000);

                $(document.documentElement)
                    .on('mousemove.draggable', function(e) {
                        if($handle.hasClass('dragoff')){
                            e.preventDefault();
                            return false;
                        }
                        var l = x+e.pageX-p_dims.left,
                            t = y+e.pageY-p_dims.top;
                        if (l < 0) l = 0;
                        else if (l > w) l = w;
                        if (t < 0) t = 0;
                        else if (t > h) t = h;
                        console.log(l, t);
                        $draggable.offset({
                            left: l+p_dims.left,
                            top: t+p_dims.top
                        });
                    })
                    .one('mouseup', function() {
                        $(this).off('mousemove.draggable');
                        $draggable.css('z-index', z);
                    });

                // disable selection
                e.preventDefault();
            });
        $handle.parent().hover(function(){

        },function(){
            $handle.addClass('dragoff')
        })
    };
})(jQuery);

$('.drag').draggable();

显然,此脚本中有一个错字。 它说:

.one('mouseup', function() {
                        $(this).off('mousemove.draggable');
                        $draggable.css('z-index', z);
                    });

但应为:

.on('mouseup', function() {
                        $(this).off('mousemove.draggable');
                        $draggable.css('z-index', z);
                    });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM