Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery UI可在溢出的Div中选择_Jquery_Html_Jquery Ui_Selectable - Fatal编程技术网

jQuery UI可在溢出的Div中选择

jQuery UI可在溢出的Div中选择,jquery,html,jquery-ui,selectable,Jquery,Html,Jquery Ui,Selectable,我们有一个项目列表,需要允许用户选择多个项目。我们希望使用jQueryUISelectable交互,而不是使用带有multiselect属性的默认HTMLselect元素。我们把它都连接起来了,它工作得很好,除非列表很长,我们把它放在一个div中,这个div会在某个高度溢出。问题是,如果用户单击并拖动列表中的多个项目,并且他们希望能够选择不可见但位于div溢出部分的项目,如果他们将鼠标拖动到div之外,则不会自动滚动到“隐藏”位置div的某些部分与普通的multi-select元素类似 我毫不怀

我们有一个项目列表,需要允许用户选择多个项目。我们希望使用jQueryUISelectable交互,而不是使用带有multiselect属性的默认HTMLselect元素。我们把它都连接起来了,它工作得很好,除非列表很长,我们把它放在一个div中,这个div会在某个高度溢出。问题是,如果用户单击并拖动列表中的多个项目,并且他们希望能够选择不可见但位于div溢出部分的项目,如果他们将鼠标拖动到div之外,则不会自动滚动到“隐藏”位置div的某些部分与普通的multi-select元素类似

我毫不怀疑我们可以处理div的mousemove或mouseleave事件并手动滚动它,但我想知道是否有人知道自动执行此操作的方法,或者最简单的方法是什么

下面是一个JSFIDLE,它显示了什么不起作用:


如果您单击项目1并向下拖动,一旦您离开演示div,我希望ul滚动以使项目6、7等开始显示。

这是jQuery UI可选插件的已知问题-


jQueryUISortable确实提供了这一功能,所以您可能会看到在那里做了什么来提供帮助。jQuery UI票证有一个链接,其中包含用于在可排序插件中实现此功能的源代码。

从可排序插件中的代码进行转换非常简单。我只是把它放在可选择的“启动”功能中:

$(window).mousemove(function(e) {

    var sensitivity = 10, speed = 20, $d = $(document);

    if (e.pageY - $d.scrollTop() < sensitivity) {

        $d.scrollTop($d.scrollTop() - speed);    // scroll up

    } else if ($(window).height() - (e.pageY - $d.scrollTop()) < sensitivity) {

        $d.scrollTop($d.scrollTop() + speed);    // scroll down

    }

    if (e.pageX - $d.scrollLeft() < sensitivity) {

        $d.scrollLeft($d.scrollLeft() - speed);  // scroll left

    } else if ($(window).width() - (e.pageX - $d.scrollLeft()) < sensitivity) {

        $d.scrollLeft($d.scrollLeft() + speed);  // scroll right

    }

});
$(window).unbind('mousemove');

并不是完全偏离主题,但事实正是如此。也许有人可以分析它的代码,并检查它是否用一种简单的方法来实现。。