javascript - SortableJS 保持不可拖动项目固定

标签 javascript jquery drag-and-drop dom-manipulation sortablejs

我有一个使用 SortableJS 创建的列表,并且有一些无法拖放的项目。下面是它的外观示例:

<ul id="user_selections">
    <li class="no_drag">Fixed</li>
    <li>Item 1</li>
    <li class="no_drag">Fixed</li>
    <li>Item 2</li>
    <li class="no_drag">Fixed</li>
    <li>Item 3</li>
    <li class="no_drag">Fixed</li>
</ul>

no_drag是固定的项目。

现在,当我将第 3 项移至第 1 项上方时,结构应如下所示:

<ul id="user_selections">
    <li class="no_drag">Fixed</li>
    <li>Item 3</li>
    <li class="no_drag">Fixed</li>
    <li>Item 1</li>
    <li class="no_drag">Fixed</li>
    <li>Item 2</li>
    <li class="no_drag">Fixed</li>
</ul>

任何人都可以帮助我如何实现这种行为。

这是我尝试过的JS代码:

var el = document.getElementById('user_selections');
if (el) {
    const sortable = Sortable.create(el, {
        filter: '.no_drag',
        onMove(evt, oe) {
            return evt.related.className.indexOf('no_drag') === -1;
        },
        preventOnFilter: false,
        onEnd: function(/**Event*/evt) {
            // Some ajax call to save the new indexes
        }
    });
}

最佳答案

我找到了一个非常适合第一个和最后一个元素的解决方案。 在选项中添加此内容:

onMove: function(e) {
            if(e.related.classList.contains('no_drag')) {
                return false;
            }
        },

如果您不想移动放置目标,它将返回 false,即它将被忽略为放置目标。

中间的元素也将被忽略,但您仍然可以定位它们之后(或之前)的元素,因此它们将被移动。

关于javascript - SortableJS 保持不可拖动项目固定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71419247/

相关文章:

php - 插入src URL后无法播放HTML5音频

javascript - 我应该在 Javascript 中使用标签吗? (如果是,什么时候?)

javascript - jquery API 请求错误/不会显示 giphy

javascript - 未捕获的类型错误 : Cannot set property 'src' of undefined

macos - 通过拖动到 macOS 中的命令行应用程序来传递 C 参数

javascript - 如何防止子元素干扰 HTML5 dragover 和 drop 事件?

Java Swing - 使用 TransferHandler 动态更改 JList

javascript - Angular4 应用程序无法在 Edge 和 IE 浏览器中运行

javascript - 如何默认显示剑道内联编辑器工具栏

javascript - Highcharts - 柱形图重绘动画