You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Svelte 5中结合interact.js实现拖拽克隆元素时无法传递拖拽动作的问题求助

在Svelte 5中结合interact.js实现拖拽克隆元素时无法传递拖拽动作的问题求助

我现在在用interact.js搭配Svelte 5(版本是5.0.0-next.200)做一个拖拽功能:目标元素一开始放在一个可滚动的div里,必须拖到这个div外面才能完成放置。据我所知这种场景只能先克隆元素,然后拖拽克隆体,没别的办法绕过去。

之前在一个原生JS项目里,我已经成功实现过类似逻辑,但到了Svelte里就怎么都跑不通了。

下面是我的代码,我怀疑问题出在interaction.start({ name: 'drag' }, ev.interactable, clone);这一行——它好像没办法把拖拽动作传递给克隆出来的元素。

我已经卡这个问题好几天了,真心求各位帮忙看看!

<script>
    import interact from 'interactjs';

    const dragElement = (ev) => {
        const el = ev.target;
        let x = (parseFloat(el.getAttribute('data-x')) || 0) + ev.dx;
        let y = (parseFloat(el.getAttribute('data-y')) || 0) + ev.dy;

        el.style.transform = `translate(${x}px, ${y}px)`;
        el.setAttribute('data-x', x);
        el.setAttribute('data-y', y);
    };

    const dragStart = (ev) => {
        const el = ev.target;
        const clone = el.cloneNode(true);
        
        clone.style.position = 'fixed';
        clone.style.zIndex = '1000';
        clone.style.pointerEvents = 'none';
        document.body.appendChild(clone);

        // 我猜测问题出在这里
        ev.interaction.start({ name: 'drag' }, ev.interactable, clone);
    };

    interact('.draggable')
        .draggable({
            inertia: true,
            listeners: {
                start: dragStart,
                move: dragElement,
            }
        });
</script>

<div class="scrollable-container">
    <div class="draggable">拖拽我到外面</div>
</div>

备注:内容来源于stack exchange,提问作者The_Lab

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 07:48:12