JQuery Draggable 包含到父级和一些额外的

Posted

技术标签:

【中文标题】JQuery Draggable 包含到父级和一些额外的【英文标题】:JQuery Draggable contained to parent and a bit extra 【发布时间】:2020-04-21 08:20:09 【问题描述】:

draggable 的文档显示我们可以使用包含父项来限制元素可以拖动到的位置。这似乎是可拖动元素被约束到另一个元素。

是否可以将父级扩展“一点”? (我会更详细地解释)。

当我们限制在父级时,可拖动元素必须保留在内部:

我希望它执行上述操作,或者至少按照下一个屏幕截图与家长保持联系

我的努力(在上面的小提琴中)很差,因为它只显示了如何使用可拖动。

$( "#draggable" ).draggable(containment:"parent");

JSFIDDLE

【问题讨论】:

是否可以将父级扩展“一点”?是的,有可能。 【参考方案1】:

我假设您的问题更像是我如何约束可拖动对象,如上所示。答案是使用替代元素或数组。

遏制类型:SelectorElementStringArray

将拖动限制在指定元素或区域的范围内。 支持多种类型:

选择器: 可拖动元素将包含在选择器找到的第一个元素的边界框内。如果未找到任何元素,则不会设置任何包含。 元素:可拖动元素将包含在该元素的边界框内。 字符串: 可能的值:"parent""document""window"数组:[ x1, y1, x2, y2 ] 形式定义边界框的数组。

所以在初始化 Draggable 之前,我们可以构建相对于目标对象和被拖动项目的点数组。您可以使用.position().width().height() 收集这些信息,也可以根据需要进行组合。

$(function() 
  function makeOffsetArray(tObj, offsetX, offsetY) 
    var p = tObj.position();
    p.right = p.left + tObj.width();
    p.bottom = p.top + tObj.height();
    return [
      p.left - offsetX,
      p.top - offsetY,
      p.right,
      p.bottom
    ];
  
  var pArr = makeOffsetArray($("#draggable").parent(), $("#draggable").width(), $("#draggable").height());
  console.log("Position Array:", pArr);
  $("#draggable").draggable(
    containment: pArr
  );
);
body 
  padding: 30px;


#outerDiv 
  width: 500px;
  height: 500px;
  border: solid 1px black;


#draggable 
  width: 50px;
  height: 50px;
  background: #f00;
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<div id="outerDiv">
  <div id="draggable">
  </div>
</div>

交叉点似乎是可拖动对象的topleft,因此bottomright 不需要偏移。

参考文献

https://api.jquery.com/position/ https://api.jquery.com/width/ https://api.jquery.com/height/ https://api.jqueryui.com/draggable/#option-containment

【讨论】:

以上是关于JQuery Draggable 包含到父级和一些额外的的主要内容,如果未能解决你的问题,请参考以下文章

JQuery Draggable - 限制到父级,但允许在父级下滑动?

如何检查 a href 是不是包含 aria-current。如果为 true,则对父级和兄弟级执行代码。使用 jQuery

继承.js-父级和iframe之间的jQuery共享

将班级名称从子级移动到父级

具有到父级的相对包含路径的 C++ makefile

Jquery常用代码