gpt4 book ai didi

javascript - 当它被拖动到另一个容器并捕捉到另一个容器时,如何强制 jquery 将元素居中?

转载 作者:技术小花猫 更新时间:2023-10-29 11:46:02 25 4
gpt4 key购买 nike

我想要一些方形的可拖动对象(在这种情况下只是 <td> 里面有数字的框)能够捕捉到一些空的表格单元格并捕捉到这些单元格的中心(空的 td 框),而不是那些单元格的(外)边缘,这似乎是默认情况下所做的。

这是我的脚本:

<script type="text/javascript">
$(document).ready(function () {
$(".inputs div").draggable( {
snap: ".spaces"
});
});
</script>

编辑:这是整个文件

 <!DOCTYPE html>
<head>
<title>Draggable</title>
<script type="text/javascript" src="jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="jquery-ui-1.8.21.custom.min.js"></script>
<script type="text/javascript" src="jquery.ui.touch-punch.min.js"></script>
<style>
.block {
z-index:9999;
cursor:move;
}
li {
list-style:none;
}
tr {
border: 2px solid black;
}
table {
border: 2px solid black;
}
.inputs div {
float:left;
background-color:#FFFFFF;
color:#004E66;
font-size:x-large;
margin:2px;
padding:20px;
border:1px solid black;
}
.spaces td {
background-color:#666666;
margin:2px;
padding:36px;
border:2px solid black;
}
</style>
</head>

<body>
<form id="form1">
<div class="inputs">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
</div>
<br/>
<table class="spaces">
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
</table>
</form>
<!-- here we are telling jquery to make each element inside of class 'inputs' draggable -->
<script type="text/javascript">
$(document).ready(function () {
$(".inputs div").draggable( {
snap: ".spaces"
}).center();
});
</script>

这是一个粗略的基于文本的说明,说明了正在发生的事情

-----+---------+XXXXXXXXXXX   X|     |         |     |    Y   x|     |        X|-----+-------+X|     |        X|
  • 如果上面的框是最上面tr行右上角的一个td单元格
  • 那么 X 就是元素当前所在的位置(显然不是那个大,我只是展示它粘住的地方......实际上我删除了一些 X 以显示它到达 Angular 后如何捕捉到 Angular 与它有一定的亲近度...)
  • 基本上这个模型展示了只有 table 的外部边缘具有关于可拖动元素的“重力”。我真正想要的是什么要做的是用 排斥力 咬入 td 细胞的所有边缘,而不是对外部事物有吸引力。
  • Y 是拖动元素所需的对齐位置。
  • 最后,出于演示的原因,我希望元素卡入到位有某种过渡而不是突然跳跃......

最佳答案

我相信这就是你想要的。

如果你愿意,你显然可以改变定位,它更适合你的需要。

演示在这里:DEMO

$(document).ready(function () {


$(".inputs div").draggable( {
opacity: .4,
create: function(){$(this).data('position',$(this).position())},
cursorAt:{left:15},
cursor:'move',
start:function(){$(this).stop(true,true)}
});

$('.spaces').find('td').droppable({
drop:function(event, ui){
snapToMiddle(ui.draggable,$(this));
}
});

});


function snapToMiddle(dragger, target){
var topMove = target.position().top - dragger.data('position').top + (target.outerHeight(true) - dragger.outerHeight(true)) / 2;
var leftMove= target.position().left - dragger.data('position').left + (target.outerWidth(true) - dragger.outerWidth(true)) / 2;
dragger.animate({top:topMove,left:leftMove},{duration:600,easing:'easeOutBack'});
}

关于javascript - 当它被拖动到另一个容器并捕捉到另一个容器时,如何强制 jquery 将元素居中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11388679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com