jQuery UI Draggable设置没有包含属性的拖动长度

时间:2019-02-15 06:28:57

标签: javascript jquery html css

我有一个不带任何父元素的div,我希望可拖动的DIV拖动到顶部和底部,但不能一直拖动到顶部。我已经使用了

drag: function (event, ui) {
      if(ui.position.top < 50)
      ui.position.top = 50;
},

但是,我想不出办法做到这一点。将元素拖动到底部时,我需要防止它从某个位置拖动。

JSFIDDLE

HTML

<div id="draggable" class="ui-widget-content">
<p>Drag me around</p>
</div>

jQuery

$( "#draggable" ).draggable({
        axis: 'y',
    containment: 'window',
        scroll: false,
    cancel: false,
    drag: function (event, ui) {
          if(ui.position.top < 50)
          ui.position.top = 50;
    },

});

2 个答案:

答案 0 :(得分:1)

您需要父/容器的高度来计算底部偏移:

$("#draggable").draggable({
  axis: 'y',
  containment: 'window',
  scroll: false,
  cancel: false,
  drag: function (event, ui) {
    var offset = 50;
    var maxHeight = (window.innerHeight - this.offsetHeight - offset);

    if (ui.position.top < offset) {
      ui.position.top = offset;
      return false;
    } 
    else if (ui.position.top > maxHeight) {
      ui.position.top = maxHeight;
      return false;
    }
  }    
});

可能需要使用false来取消或基本“释放”超出边界的拖动效果。


这是您进行以上更改的地方:

$("#draggable").draggable({
  axis: 'y',
  containment: 'window',
  scroll: false,
  cancel: false,
  drag: function(event, ui) {
    var offset = 50;
    var maxHeight = (window.innerHeight - this.offsetHeight - offset);

    if (ui.position.top < offset) {
      ui.position.top = offset;
      //return false;
    } 
    else if (ui.position.top > maxHeight) {
      ui.position.top = maxHeight;
      //turn false;
    }
  },

});
html {
  overflow: hidden;
}

.ui-widget-content {
    width: 100%;
    padding: 15px;
}
<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/themes/overcast/jquery-ui.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.js"></script>

<div id="draggable" class="ui-widget-content">
  <p>Drag me around</p>
</div>

答案 1 :(得分:0)

考虑到div没有父级,并且要将其拖到整个文档中,应将其添加到代码中

$( "#draggable" ).draggable({
        axis: 'y',
    containment: 'window',
        scroll: false,
    cancel: false,
    drag: function (event, ui) {
          if(ui.position.top < 50)
          ui.position.top = 50;
          if(ui.position.top > $(document).height() - 50)
          ui.position.top = $(document).height() - 50;
    },

});