Если я перетаскиваю объект очень медленно, он делает именно то, что я хочу.Однако, если я делаю это немного быстрее или очень быстро, это не работает, как ожидалось.Вы можете увидеть оба результата: ожидаемый при медленном перетаскивании и безупречный при быстром перетаскивании.Я только начинающий jquery, если вы видите какие-то глупые части кода JS, пожалуйста, дайте мне знать.
Движущийся объект на заднем плане (при перетаскивании перетаскиваемого объекта) должен возвращаться в свое исходное положение каждыйНа 20 пикселей отодвигается от держателя карты.Он не делает этого при быстром перемещении, но делает это при медленном перетаскивании триггера.
Пример в реальном времени: http://jsbin.com/egeki3
ps перетаскивают только верхние / нижние направления
Только часть JS (с использованием jQuery UI)
$().ready(function(){
// map measurments
var mapWidth = parseInt($('#map').width());
var mapHeight = parseInt($('#map').height());
var fragmentH = 20;
var fragmentW = 20;
// number of map fragments to use
var mapBlocksH = Math.ceil(mapHeight/fragmentH)+2;
var mapBlocksW = Math.ceil(mapWidth/fragmentW)+2;
// the area size of map fragments displacement
var mapH = mapBlocksH*fragmentH;
var mapW = mapBlocksW*fragmentW;
// calculate the maps fragments wrapper position, dimension
$('#map div.map, div.drag').css({height: mapH, width: mapW, left: (mapWidth-mapW)/2, top: (mapHeight-mapH)/2});
for(i = 0; i < mapBlocksH*mapBlocksW; i++)
{
$('#map div.map').append('<div></div>');
}
$('#map div.drag').draggable({
revert: true,
revertDuration: 0,
addClasses: false,
start : function(event, ui){
mapOriginalOffset = $('#map div.map').offset();
//mapOriginalOffset2 = $('#map div.map').offset();
},
drag : function(event, ui){
$('#map div.map').offset({top: mapOriginalOffset.top + (ui.originalPosition.top-ui.position.top)});
if(Math.abs($('#map div.map').offset().top-$('#map').offset().top) % fragmentH == 0)
{
$('#map div.map').offset({top: mapOriginalOffset.top});
return false;
//$('#map div.map').offset({top: mapOriginalOffset.top});
//mapOriginalOffset2.top = $('#map div.drag').offset().top;
}
},
stop : function(event, ui){
}
});