首页 > 解决方案 > jQuery UI Draggable 设置没有包含属性的拖动长度

问题描述

我有一个没有任何父元素的 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;
    },

});

标签: javascriptjqueryhtmlcss

解决方案


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

$("#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>


推荐阅读