gpt4 book ai didi

Jquery UI 可拖动不滚动可排序容器

转载 作者:行者123 更新时间:2023-12-01 00:00:14 27 4
gpt4 key购买 nike

我有一些可拖动的项目(#draggable li),我将它们拖放到可排序的(#sortable)中。

可排序由两个 div 包裹,最外面的 div 有溢出-y:滚动。拖放机制工作正常,直到可排序列表展开并滚动。

当我尝试拖动并直接将一个项目放到可排序上时,我无法让可排序滚动条以我想要的方式自动滚动(比如说想要向上放到第一个元素上方或向下到低于最后一个元素)。但是,当我尝试拖动项目并对其进行排序时,滚动条会在拖动时自动滚动。

这是一个错误还是我的代码工作方式有问题。

完整代码如下:

<body>
<ul id="draggable" class="connectedSortable">
<li class="ui-state-default big">Item 1</li>
<li class="ui-state-default big">Item 2</li>
<li class="ui-state-default big">Item 3</li>
<li class="ui-state-default big">Item 4</li>
<li class="ui-state-default big">Item 5</li>
<li class="ui-state-default big">Item 6</li>
</ul>

<div id="outerDiv">
<div id="innerDiv">
<ul id="sortable" class="connectedSortable">
</ul>
</div>
</div>
</body>

//CSS

#sortable, #draggable { 
list-style-type: none;
margin: 0;
padding: 0 0 2.5em;
margin-right: 10px;
}
#sortable li, #draggable li {
margin: 0 5px 5px 5px;
padding: 5px;
font-size: 1.2em;
width: 120px;
}
.marker{
background: none repeat scroll 0 0 #DDDDDD;
border-bottom: 1px solid #BBBBBB;
border-top: 1px solid #BBBBBB;
display: block;
height: 20px;
width: 100%;
text-align: center;
vertical-align: middle;
color: #666;
font-size: 18px;
font-style: italic;
}

#outerDiv{
background: none repeat scroll 0 0 #EEEEEE;
height: 100%;
right: 0;
position: absolute;
overflow-y: scroll;
top: 0;
width: 300px;
}

#innerDiv{
border: 1px solid #CCCCCC;
min-height: 400px;
position:absolute;
}
#sortable{
width: 200px;
padding: 10px;
border : 1px solid black;
min-height: 230px;
}

#draggable{
position:absolute;
top:0;
left:0;
}
.big{
height: 80px;
}

//JS

$(function() {
$( "#sortable" ).sortable({
placeholder: "marker",
axis: "y",
});

$("#draggable li").draggable({
helper: "clone",
cursor: "move",
revert: "invalid",
revertDuration: 500,
connectToSortable: "#sortable"
});
});

fiddle 演示 http://jsfiddle.net/8KDJK/21/

任何帮助将不胜感激。谢谢:)

最佳答案

我不确定这是一个错误,但它不是在经典场景中。

几个月前我花了很多时间寻找解决方法,这是我的解决方案:http://jsfiddle.net/8KDJK/23/

它已经工作了几个月,没有出现任何问题。

这个想法是在助手构造回调期间将元素克隆附加到可滚动容器,然后在 1 毫秒后使用 setTimeout 函数将助手附加到主体,以便能够在网页上拖动。

  $("#draggable li").draggable({
cursor: "move",
revert: "invalid",
revertDuration: 500,
connectToSortable: "#sortable",

//Here is the workaround
//**********************

containment: 'body',
helper: function(){
//Hack to append the element to the body (visible above others divs),
//but still bellonging to the scrollable container
$('#sortable').append('<div id="clone" class="ui-state-default big">' + $(this).html() + '</div>');
$("#clone").hide();
setTimeout(function(){
$('#clone').appendTo('body');
$("#clone").show();
},1);
return $("#clone");
}
});

链接到我之前的问题:JqueryUI, drag elements into cells of a scrolling dropable div containing large table

关于Jquery UI 可拖动不滚动可排序容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14241994/

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