jquery-ui sortable - 拖动时隐藏原始列表隐藏被拖动项

Posted

技术标签:

【中文标题】jquery-ui sortable - 拖动时隐藏原始列表隐藏被拖动项【英文标题】:Jquery-ui sortable - hide the original list while dragging hides the dragged item 【发布时间】:2020-07-21 19:25:06 【问题描述】:

我使用 Jquery-UI 来做一个板子。基本上我有 2 个可排序的列表,我从一个列表中取出元素并将其放入另一个列表中。

系统运行良好。现在我想在拖动元素的同时隐藏第一个列表的容器 div 以使第二个列表更加可见。

为了清楚起见,这里有一个简化的代码:

$(".sortable").sortable(
        connectWith: ['.sortable'],
        helper: "clone",
        start: function (event, ui) 
          $("#list_one").hide()
        
    );
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script
  src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"
  integrity="sha256-VazP97ZCwtekAsvgPBSUwPFKdrwD3unUfSGVYrahUqU="
  crossorigin="anonymous"></script>
</head>
<body>
<div id="list_one" style="border: 1px solid red">
<ul class="sortable" style="min-height: 100px">
<li id="my_item">my item</li>
</ul>
</div>
<div id="list_two" style="border: 1px solid blue">
<ul class="sortable" style="min-height: 100px">
</ul>
</div>
</body>
</html>

所以拖放效果很好(即使第一个 div 消失了,我仍然可以将我的“不可见”项放在第二个列表中。

但是看不到我拖动的对象还是有点问题的。

有什么想法吗?

谢谢

【问题讨论】:

【参考方案1】:

如果我当时得到了您的问题,这就是我想出解决您的问题的方法,问题在于您的代码中您使用 $("#list_one") 将属性 display none 添加到 #list_one。 hide() 它隐藏了你拖动的元素,因为它在#list_one 内,为了解决这个问题,我添加了一个克隆拖动的辅助函数(不确定为什么克隆辅助不起作用)并将其附加到不同的元素(在我的sn-p &lt;body&gt;) 并且一旦排序拖动停止,它将删除克隆的元素,这是一个有效的 sn-p:

$(".sortable1").sortable(
    connectWith: ['.sortable2'],
    helper: function (e, li) 
        copyHelper = li.clone().appendTo('body');
        return copyHelper;
    ,
    stop: function () 
        copyHelper && copyHelper.remove();
        $("#list_one").css('visibility', 'visible');
    ,
    start: function (event, ui) 
      $("#list_one").css('visibility', 'hidden');
    
);
$(".sortable2").sortable();
<html>

<head>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js" integrity="sha256-VazP97ZCwtekAsvgPBSUwPFKdrwD3unUfSGVYrahUqU=" crossorigin="anonymous"></script>
</head>

<body>
    <div id="list_one" style="border: 1px solid red">
        <ul class="sortable1" style="min-height: 100px">
            <li id="my_item1">my item</li>
            <li id="my_item2">my item</li>
            <li id="my_item3">my item</li>
        </ul>
    </div>
    <div id="list_two" style="border: 1px solid blue">
        <ul class="sortable2" style="min-height: 100px">
        </ul>
    </div>
    <script>
    </script>
</body>

</html>

在另一个注释中,我建议您不要隐藏元素,只需为其添加较低的不透明度值,这是一个更好的用户体验,这里也是一个有效的 sn-p:

$(".sortable1").sortable(
    connectWith: ['.sortable2'],
    helper: function (e, li) 
        copyHelper = li.clone().appendTo('body');
        return copyHelper;
    ,
    stop: function () 
        copyHelper && copyHelper.remove();
        $("#list_one").css('opacity', 1);  
    ,
    start: function (event, ui) 
      $("#list_one").css('opacity', 0.3);
    
);
$(".sortable2").sortable();
<html>

<head>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js" integrity="sha256-VazP97ZCwtekAsvgPBSUwPFKdrwD3unUfSGVYrahUqU=" crossorigin="anonymous"></script>
</head>

<body>
    <div id="list_one" style="border: 1px solid red">
        <ul class="sortable1" style="min-height: 100px">
            <li id="my_item1">my item</li>
            <li id="my_item2">my item</li>
            <li id="my_item3">my item</li>
        </ul>
    </div>
    <div id="list_two" style="border: 1px solid blue">
        <ul class="sortable2" style="min-height: 100px">
        </ul>
    </div>
    <script>
    </script>
</body>

</html>

【讨论】:

是的,我明白了为什么它不起作用,但我不知道如何解决它......你给了我答案。非常感谢。是的,对于 UX,最好使用不透明度,但如果我想隐藏这个 div,那是因为它下面有一些链接列表,我可以在其中删除这个项目。所以改变不透明度不会让我访问这些列表。无论如何再次感谢 很高兴为您提供帮助:)

以上是关于jquery-ui sortable - 拖动时隐藏原始列表隐藏被拖动项的主要内容,如果未能解决你的问题,请参考以下文章

jquery ui的sortable拖动克隆问题

jQuery-UI 可拖动和可排序

jquery-ui sortable 使用实例

jquery-ui sortable - 在列表之间移动任务

Jquery-ui Sortable with js list maker from array 无法正常工作

可拖动的 droppable 和 sortable