当使用jquery使用滚动溢出从一个div拖动到另一个div时,Div消失

时间:2016-03-25 21:13:07

标签: javascript jquery html css

我有两个" DIV" s,一个在左边,一个在右边。右边有可拖动的元素,左边有一个可放置的容器。两个DIV都有CSS属性overflow: auto,这在我的实现中是必不可少的,因为当DIV溢出时我需要在每个div中出现一个滚动。

问题是,当我在右侧DIV中拖动元素并将其向左移动时,它会在DIV边缘后消失。

这是我试图做的一个例子。



<!DOCTYPE html>
<html>

<head>
  <title>Practice</title>

  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
  <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>

  <script>
    $(function() {
      for (var i = 1; i <= 20; i++) {
        $('#right').append($('<div></div>')
          .addClass('item')
          .html(i));

      }
      $(".item").draggable({
        cursor: "move",
        revert: "invalid"
      });
      $("#bin").droppable({
        drop: function(event, ui) {
          var mydiv = $(ui.draggable);
          $("#bin").html("Dropped");
        }
      });
    });
  </script>

  <style>
    #left {
      border: 2px solid black;
      position: fixed;
      width: 49%;
      height: 98%;
      overflow: auto;
    }
    #right {
      border: 2px solid black;
      position: fixed;
      left: 52%;
      top: 2%;
      width: 46%;
      height: 98%;
      overflow: auto;
    }
    #bin {
      border: 2px solid black;
      position: relative;
      left: 12%;
      top: 5%;
      width: 75%;
      height: 75%;
    }
    .item {
      border: 2px solid black;
      left: 12%;
      top: 5%;
      width: 15%;
      height: 5%;
    }
  </style>

</head>

<body>
  <div id="left">
    <div id="bin">

    </div>
  </div>

  <div id="right">




  </div>

</body>

</html>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:1)

您需要在CSS中删除overflow:auto。然后,当然后在div之间拖动时,您将看到该项目可见。

为了完成您喜欢的功能,您需要一个外部div包装两个容器盒。您在外部div上设置了固定高度,然后使用overflow-y:scroll来获取您的功能。

答案 1 :(得分:0)

你可以像其他人建议的那样做,但我总是发现实现这一目标的最佳方法是将可拖动项目设置为position:fixed

参见例如: https://jsfiddle.net/gregborbonus/tzz0927p/1/

就我个人而言,这可以提供更大的灵活性,但我也做了很多有关响应式设计的工作,以使其正常工作。

我编辑过包含重叠的div。添加了一些功能,使其更加可见,如随机颜色,以及悬停和悬停事件,以便查看并单击每个框。

https://jsfiddle.net/gregborbonus/tzz0927p/3/

使用100并添加滚动功能以使滚动平滑。还添加了一个快速代码段,以便元素只显示在包含框中。

这与你的代码不同,它使用2个容器,rightc用于主容器(滚动的容器),右边用于所有元素的容器。其余部分在代码中进行了评论。

https://jsfiddle.net/gregborbonus/tzz0927p/13/

所以,我意识到这些元素仍会在页面加载时与页面重叠。

所以,为了显示这个使用更短的div并改变以补偿onload:

https://jsfiddle.net/gregborbonus/tzz0927p/15/