【问题标题】:Stop dragging when edges show with jQuery使用 jQuery 显示边缘时停止拖动
【发布时间】:2013-01-14 10:16:11
【问题描述】:

这里是网站的链接:War game map

我有一个较大的 jQuery 可拖动 div(将地图图像设置为背景)在一个较小的 div 中,该 div 上有溢出:隐藏。重点是让用户像在 maps.google.com 上一样拖动地图。

虽然 Google 地图有一个水平循环地图,但我的地图停在太平洋的两边。就像现在一样,用户可以将地图两边拖得太远,从而使红色背景开始显示在左侧或右侧。

在红色背景开始显示之前,当地图边缘出现时,我如何使用 jQuery 停止拖动?

(我知道地图现在丑得要命,但它正在建设中。)

CSS:

body {

overflow:hidden;
background-color: #ff0000;

}

#theBody {

position: absolute;
top: 50px;
left: 0px;
width: 1px;
height: 1px;
overflow: hidden;

}

#draggable {

background-image: url(map.gif);
width: 3944px;
height: 2258px;

}

jQuery:

var viewportWidth = $(window).width();
var viewportHeight = $(window).height();

viewportHeight = (viewportHeight - 50);

$('#theBody').css({'width': viewportWidth});
$('#theBody').css({'height': viewportHeight});

$('#draggable').draggable();

HTML

<div id="theBody">

    <div id="draggable" class="ui-widget-content"></div>

</div>

【问题讨论】:

  • 好问题..我也很好奇答案:-)
  • 您应该在此处发布相关代码,以便将来您的网站不再可用时帮助其他用户。如果你能设置一个jsfiddle,那就太好了。
  • 是的,你烤得太好了。这是代码。

标签: jquery jquery-ui draggable


【解决方案1】:

jquery-ui 的draggable 特性提供了定义容器的可能性,这将限制被拖动项目的移动。 通过在初始化您的可拖动对象时设置containment 参数,您将达到预期的目标。 在您的情况下,您应该使用

$('#draggable').draggable({containment:"#theBody"});

您可以找到更多详细信息here

为了使可拖动对象大于包含区域,您可以使用以下技巧:

  1. 使用overflow:hidden创建您想要的容器大小的viewContainer div(例如300x300)
  2. draggableContainer 附加到这个div,这将是可拖动意义上的真正容器。第二个 div 必须足够大以包含您的可拖动对象。
  3. 附加到这个draggableContainer你的可拖动draggable,比如说500x500
  4. 根据另外两个的大小调整draggableContainer的大小和位置。在这种情况下,为了允许平移整个draggable,它需要是700x700-200x-200 偏移量

你可以看到complete working example here

【讨论】:

  • 了解,请参阅答案中的修复
  • Wow Romain... 这看起来像是一个可能的解决方案。我去看看,谢谢!
  • 没问题,只要回答涵盖了你的问题就接受
  • 成功了!谢谢你,罗曼,你让我很开心......不是我的一周:D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-22
  • 1970-01-01
  • 1970-01-01
  • 2018-08-29
  • 2012-03-05
  • 1970-01-01
  • 2022-01-09
相关资源
最近更新 更多