我有一个不带任何父元素的div,我希望可拖动的DIV拖动到顶部和底部,但不能一直拖动到顶部。我已经使用了
drag: function (event, ui) {
if(ui.position.top < 50)
ui.position.top = 50;
},
但是,我想不出办法做到这一点。将元素拖动到底部时,我需要防止它从某个位置拖动。
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;
},
});
答案 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;
},
});