我正在尝试拖动背景位置而不是元素本身。
演示这是我的代码
var left = 0,
top = 0;
$('#box').draggable({
start:
drag: function (e, ui) {
// += as I am setting left and top = 0, so just taking the 'change'
left += ui.position.left;
top += ui.position.top;
ui.position.left = 0;
ui.position.top = 0;
$(this).css({
'background-position': left + 'px ' + top + 'px'
});
},
});
它拖拽得非常快,很快background-position-x
和background-position-y
达到一个很大的值。
我发现drag
事件被调用两次。
拖动函数第一次给出正确的拖动位置,但对于第二次,我猜,它将background-position
值添加到自己。
只要你在拖拽,jQuery UI就会跟踪ui.position
,不管你把它设置为0
。所以,如果你把它向右移动一个像素,left
就是1
。然后将其设置为0
,但是当您(不停止)向右拖动另一个像素时,ui.position.left
实际上是2
,而不是1
。
所以这就是解决方案。
- 跟踪
- 当拖动停止时,将这些值重置为
0
(否则背景会一直跳回0px 0px
)。
ui.position
值并在拖动时减去它们(因此,我们计算前一次移动和新移动之间的差异)。我已经更新了你的提琴,检查它在这里:http://jsfiddle.net/ZtYem/2/(我添加了那些<span>
标签来分析坐标,所以你可以再次删除它们)。