gpt4 book ai didi

jQuery Draggable + Sortable - 如何在两个可滚动列表之间拖放

转载 作者:行者123 更新时间:2023-12-03 22:49:58 28 4
gpt4 key购买 nike

我想要两个列表,可用项目和选定项目,其中可用项目通过拖放分配给选定项目。我要求所选项目可排序,但不要求可用项目可排序。挑战在于这两个列表都可能包含大量项目,因此需要可滚动。

这是我迄今为止拥有的 jQuery:

        <script type="text/javascript">
$(function() {
$( "#available > li" ).draggable({
revert: 'invalid',
connectToSortable: '#selected',
containment: '#drag_container'
});

$( "#selected" ).sortable({
axis: 'y',
placeholder: 'ui-state-highlight'
});
});
</script>

以及相应的HTML:

            <div class="drag_container">
<ul id="available" class="drag_column draggable">
<li id="item1" class="ui-state-default"><span class="ui-icon ui-icon-arrow-4-diag"></span>Item 1</li>
<li id="item2" class="ui-state-default"><span class="ui-icon ui-icon-arrow-4-diag"></span>Item 2</li>
<li id="item3" class="ui-state-default"><span class="ui-icon ui-icon-arrow-4-diag"></span>Item 3</li>
<li id="item4" class="ui-state-default"><span class="ui-icon ui-icon-arrow-4-diag"></span>Item 4</li>
<li id="item5" class="ui-state-default"><span class="ui-icon ui-icon-arrow-4-diag"></span>Item 5</li>
<li id="item6" class="ui-state-default"><span class="ui-icon ui-icon-arrow-4-diag"></span>Item 6</li>
<li id="item9" class="ui-state-default"><span class="ui-icon ui-icon-arrow-4-diag"></span>Item 9</li>
<li id="item10" class="ui-state-default"><span class="ui-icon ui-icon-arrow-4-diag"></span>Item 10</li>
</ul>


<ul id="selected" class="drag_column draggable sortable" style="margin-left: 20px;">
<li id="item7" class="ui-state-default"><span class="ui-icon ui-icon-arrow-4-diag"></span>Item 7</li>
<li id="item8" class="ui-state-default"><span class="ui-icon ui-icon-arrow-4-diag"></span>Item 8</li>
<li id="item9" class="ui-state-default"><span class="ui-icon ui-icon-arrow-4-diag"></span>Item 9</li>
<li id="item10" class="ui-state-default"><span class="ui-icon ui-icon-arrow-4-diag"></span>Item 10</li>
<li id="item11" class="ui-state-default"><span class="ui-icon ui-icon-arrow-4-diag"></span>Item 11</li>
<li id="item12" class="ui-state-default"><span class="ui-icon ui-icon-arrow-4-diag"></span>Item 12</li>
<li id="item13" class="ui-state-default"><span class="ui-icon ui-icon-arrow-4-diag"></span>Item 13</li>
<li id="item14" class="ui-state-default"><span class="ui-icon ui-icon-arrow-4-diag"></span>Item 14</li>
<li id="item15" class="ui-state-default"><span class="ui-icon ui-icon-arrow-4-diag"></span>Item 15</li>
<li id="item16" class="ui-state-default"><span class="ui-icon ui-icon-arrow-4-diag"></span>Item 16</li>
<li id="item17" class="ui-state-default"><span class="ui-icon ui-icon-arrow-4-diag"></span>Item 17</li>
<li id="item18" class="ui-state-default"><span class="ui-icon ui-icon-arrow-4-diag"></span>Item 18</li>
</ul>
<div style="clear: both">&nbsp;</div>
</div>

但是,由于可滚动列表的要求,我无法让可拖动行为优雅地工作(请参阅 http://pastehtml.com/view/1bsk6bt.html 处的演示)。

一旦被拖动的项目进入可用项目列表,它就会消失在可滚动框架后面。我尝试过克隆助手,也尝试过使用包含 div、不同的溢出选项、关闭 jQuery 中的滚动选项,但无法使其正常工作。我确信有人已经完成了我在这里要做的事情,并且可以节省我一些时间? :)

任何帮助将不胜感激!

最佳答案

哇!修复这个问题很有趣。

第一个问题,列表永远水平滚动,我通过在 CSS 中进行一些简单的溢出更改来修复。我从您的 .drag_column 中删除了两个溢出属性,并将溢出:隐藏在 .drag_container 中。

.drag_container {
width: 1000px;
margin: 0 auto;
position: relative;
border: 1px solid black;
position: relative;
z-index: 1;
overflow: hidden;
}

.drag_column {
padding: 5px;
width: 490px;
height: 200px;
float: left;
position: relative;
}

不幸的是,当我这样做时,当您将可拖动对象从一个列表移动到另一个列表时,它会产生位置错误(它会向上射击,具体取决于您选择的列表项)。为了解决这个问题,我将“helper:clone”行添加到了可拖动创建函数中。

$( "#available > li" ).draggable({ 
revert: 'invalid',
connectToSortable: '#selected',
containment: '#drag_container',
helper: 'clone'
});

这再次造成了不良影响。克隆助手使得原始列表永远不会删除项目。为了解决这个问题,我必须手动创建一个删除旧项目的函数。我所做的就是向可拖动对象添加一个 start: 函数,该函数获取对象 id 并将其放入变量中。然后我创建了 #se​​lected 列表的可放置对象,并在那里创建了一个 drop: 函数。该 drop 函数只是对具有匹配 id 的对象执行 slipUp(100) 操作。请注意,我在脚本启动时创建了一个变量 - 这修复了 IE 中的错误。

var dragged = null;
$(function() {
$( "#available > li" ).draggable({
revert: 'invalid',
connectToSortable: '#selected',
containment: '#drag_container',
helper: 'clone',
start: function(ui, event) {
dragged = $(this).attr('id');
}
});
$( "#selected" ).droppable({
drop: function(event, ui) {
var ident = "#" + dragged;
$(ident).slideUp(100);
}
});

我在 http://pastehtml.com/view/1by9nfd.html 发布了包含完整 HTML 的页面这样你就可以随意玩耍。希望这有帮助!

关于jQuery Draggable + Sortable - 如何在两个可滚动列表之间拖放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4109757/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com