jquery UI可拖动跳转屏幕滚动

时间:2013-07-10 16:18:32

标签: jquery jquery-ui internet-explorer

我的jquery UI draggable工作得很好,除非我尝试在屏幕外拖动某些东西,导致屏幕滚动。然后,所选项目跳转到谁知道哪里 - 你再也看不到了。有谁知道我怎么解决这个问题?谢谢。

现在我们正在使用jquery-ui-1.8.24和jquery-1.8.2

3 个答案:

答案 0 :(得分:1)

请注意,appendTo的元素样式应为position: relative使用jQuery-ui时draggable

答案 1 :(得分:1)

在用jQuery找不到解决方案之后,我实现了自己的拖拽 - 对我有用。 它还允许我删除jQuery UI,这很棒。 请注意,draggable和handle是jquery元素,limit是一个对象。 这是代码 -

function initializeDrag(draggable, handle, limits) {
                            var initialMousePosition, initialDraggablePosition;
                            handle.on('mousedown', function (e) {
                                initialMousePosition = {
                                    x: e.pageX,
                                    y: e.pageY
                                };
                                initialDraggablePosition = {
                                    top: parseInt(draggable.css('top'), 10),
                                    left: parseInt(draggable.css('left'), 10)
                                }
                                document.addEventListener('mousemove', onMouseMove);
                                document.addEventListener('mouseup', onMouseUp);
                            });

                            function onMouseMove(e) {
                                var verticalDelta = e.pageY - initialMousePosition.y;
                                var horizontalDelta = e.pageX - initialMousePosition.x;
                                var topRes = initialDraggablePosition.top + verticalDelta;
                                var leftRes = initialDraggablePosition.left + horizontalDelta;
                                topRes = Math.max(topRes, limits.top);
                                topRes = Math.min(topRes, limits.bottom);
                                leftRes = Math.max(leftRes, limits.left);
                                leftRes = Math.min(leftRes, limits.right);

                                draggable.css({
                                    top: topRes + 'px',
                                    left: leftRes + 'px'
                                });
                            }

                            function onMouseUp() {
                                document.removeEventListener('mousemove', onMouseMove);
                                document.removeEventListener('mouseup', onMouseUp);
                            }
                        }

答案 2 :(得分:0)

http://jsfiddle.net/g4xHG/

如果在body元素上设置overflow属性,则此问题就会消失。不知道为什么。

body {
    overflow: auto;
}