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

如何将已放置的拖拽元素放回原容器?附现有jQuery代码

实现拖拽元素放回原始容器的方案

我来给你梳理下具体的实现思路和代码调整,你可以基于现有代码修改:

1. 初始化时保存每个卡片的原始容器引用

首先,在初始化拖拽元素的时候,给每个卡片添加一个data属性,记录它的原始父容器。这样后续拖拽时就能明确知道该放回哪里:

var numbers = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ];
numbers.forEach(function(num) {
  var $card = $('#card' + num);
  // 保存原始容器的DOM引用
  $card.data('originalContainer', $card.parent());
  
  $card.data('number', num).draggable({
    containment: '#content',
    stack: '#cardPile div',
    cursor: 'move',
    // 把原始容器也加入吸附目标,提升交互体验
    snap: '#cardSlots, #cardPile',
    snapMode: 'inner',
    snapTolerance: 10,
    revert: function(dropped) {
      var $draggable = $(this);
      var hasBeenDroppedBefore = $draggable.data('hasBeenDropped');
      var targetIsSlots = dropped && dropped[0].id === 'cardSlots';
      var targetIsOriginal = dropped && dropped[0] === $draggable.data('originalContainer')[0];

      // 如果拖拽到的不是目标容器也不是原始容器,触发返回动画
      if (!dropped || (!targetIsSlots && !targetIsOriginal)) {
        return true;
      }

      // 如果放回了原始容器,重置已放置状态
      if (targetIsOriginal) {
        $draggable.data('hasBeenDropped', false);
      }

      return !targetIsSlots;
    }
  });
});

2. 将原始容器设置为可放置区域

接下来,把存放卡片的原始容器(比如你的#cardPile)设置成droppable,这样它就能接收被拖拽回来的卡片:

// 配置原始容器为可放置区域
$('#cardPile').droppable({
  // 接受来自自身和目标容器的卡片
  accept: '#cardPile div, #cardSlots div',
  drop: function(event, ui) {
    var $draggable = ui.draggable;
    // 将卡片放回它的原始容器
    $draggable.appendTo($draggable.data('originalContainer'));
    // 重置卡片的已放置状态,方便后续再次拖拽到目标容器
    $draggable.data('hasBeenDropped', false);
  }
});

关键逻辑说明

  • 保存原始容器:通过data('originalContainer')记录每个卡片的初始父元素,避免硬编码容器选择器,提升代码灵活性。
  • 调整revert逻辑:让卡片只有在拖拽到非目标/非原始容器时才返回原位,放回原始容器时直接放置并重置状态。
  • 原始容器设为droppable:确保卡片能被正确放回原始容器,同时处理状态重置,不影响后续的拖拽操作。

如果你的目标容器(#cardSlots)已有对应的droppable配置,保持它的逻辑不变即可,这样就能同时支持「拖到目标容器」和「拖回原始容器」两个功能啦。

内容的提问来源于stack exchange,提问作者Apurva

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:59:39