【问题标题】:Don't drag over window edges不要拖过窗口边缘
【发布时间】:2016-12-13 13:59:24
【问题描述】:

我有两个重叠的 div。 .second 超过 .first。 每个窗口的宽度和高度都占据了整个窗口。

.second 的属性为 position: absolute; left: -800px; 这样您就可以单击它的一部分将其拖到 .first 上

我希望拖动功能可以防止 .second 超出框架的右边缘和/或超出左侧 -800 像素。

【问题讨论】:

  • 你能提供你的代码吗?您是否使用 JQuery UI 可拖动小部件进行拖动?
  • 如果您使用 jQuery UI 使元素可拖动,您应该查看参数“containment”,它允许您将边界框设置为限制在拖动范围内api.jqueryui.com/draggable/#option-containment
  • 确实,我使用 jQuery API 来实现抓取效果,但我不太了解包含选项。这是工作区的链接clementfauquet.com/test/port_clem
  • 我添加了一个简单的例子,说明如何使用 jquery ui draggable 和包含选项。

标签: jquery frame drag


【解决方案1】:

这里是一个示例,如何使用可拖动数组的 jquery ui 的包含选项。该数组有 4 个数字,其中前 2 个数字定义边界框的左上角,后 2 个数字定义边界框的右下角。

所以在下面的示例中,元素左侧的最小 css 为 0px,左侧的最大 css 为 400px。最小css top为10px,最大css top为200px

基本上你只需要根据你的需要调整数组中的值。

var index1 = 10;

$('#test').draggable({
  containment: [0, index1, $('body').width()/4, 200]
});

// update option containment after a window resize
$(window).resize(function() {
  $( "#test" ).draggable( "option", "containment", "parent" );
});
body{
 height: 350px;
}

#test{
  width: 50px;
  height: 50px;
  border: 2px solid #000;
  background: gray;
  position: absolute;
  top: 10px;
  left: 0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css">
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>

<div id="test"></div>

【讨论】:

  • 非常感谢,成功了 ;) 不过,由于我的最小左侧是负值,我在调整大小时遇到​​了问题。如何使用 calc(100% - 100px); 等响应值设置数组?
  • 正如您在更新后的示例中所见,您可以使用变量以及表达式来计算包含数组中的必要值。调整窗口大小后,您可以更新包含值,如示例中所示。只需使用满足您需求的值。注意:该示例不会更新 SO 上的包含,因为运行代码的 iframe 不会调整大小。
  • 在整页中运行示例,窗口调整大小的更新也将起作用。
猜你喜欢
  • 2017-10-28
  • 2020-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多