2015-06-29 2 views
1

Мне нужно специальное перетащить на div, как подсказывает название. Идея состоит в том, чтобы панель, подобная img ниже.Пользовательское перетаскивание на div

example map

  1. Вся область должна быть перетаскиваемым.
  2. Белые блоки, как показано, должны иметь разные размеры, но я думаю, что это относится к этому вопросу.
  3. Белые блоки будут загружаться по мере необходимости, когда пользователь «перетаскивает» в любом направлении (я буду использовать ajax для этого)
  4. будет с помощью ASP.NET MVC для веб-сайта и JQuery

цель состоит в том, чтобы реализовать пользовательскую карту для учебного игрового проекта. Мне не нужно какое-либо окончательное решение. Любые намеки или подсказки будут глубоко оценены.

+0

Вы застряли где-нибудь? У вас есть прототип какого-то типа? –

+0

Пока нет прототипа, поскольку я застрял, чтобы придумать что-то, что позволяет мне прокручивать содержимое контейнера div. – HelderMPinhal

+0

Нужно ли белым ящикам перетаскивать? Название говорит так, но ваше описание не – tic

ответ

1

Вы можете создать контейнер, сделать что перетаскивать с Jquery UI, а затем добавить коробки внутри него

https://jqueryui.com/draggable/

https://jsfiddle.net/ytxedata/4/

HTML

<div id="draggable"> 
    <div class="box" style="left:10px;top:10px;width:50px;height:60px;"></div> 
    <div class="box" style="left:80px;top:40px;width:65px;height:45px;"></div> 
    <div class="box" style="left:150px;top:70px;width:50px;height:70px;"></div> 
    <div class="box" style="left:220px;top:10px;width:60px;height:30px;"></div> 
</div> 

JS

$(document).ready(function() { 
    $("#draggable").draggable(); 
}); 

CSS

#draggable { 
    width:300px; 
    height:200px; 
    overflow:hidden; 
    background-color:blue; 
    position:relative; 
} 

.box { 
    background-color:red; 
    position:absolute; 
} 

EDIT:

Чтобы добавить больше коробки из этого примера вы можете использовать:

function addBox(x, y, w, h) { 
    x = (x === 0) ? '0' : x + 'px'; 
    y = (y === 0) ? '0' : y + 'px'; 
    w = (w === 0) ? '0' : w + 'px'; 
    h = (h === 0) ? '0' : h + 'px'; 
    var $boxes = $('#draggable .box'); 
    var $newBox = $('<div class="box"></div>'); 
    $newBox.css({ 'left': x, 'top': y, 'width': w, 'height': h }); 
    if ($boxes.length === 0) 
     $('#draggable').html($newBox); 
    else 
     $newBox.insertBefore($boxes.first()) 
} 

addBox(10, 120, 100, 60); 
+0

Эта перетаскиваемая область должна постоянно заполнять всю клиентскую область. Когда происходит событие перетаскивания, нужно ли пересчитать его ширину/высоту? – HelderMPinhal

+0

@HelderMPinhal Да, вы можете установить новые левые, верхние, ширинные и высотные значения с помощью функции jquery 'css', которую можно вызвать при перетаскиваемом событии остановки: https://jqueryui.com/draggable/#events – tic

+0

Спасибо за вашу помощь и пример. Что касается набора свойств css, не может ли восстановить область в исходное состояние, а не позволять пользователю продолжать перетаскивание, чтобы искать новые поля? – HelderMPinhal

0

использование Jquery UI перемещаемой

$("#draggable").draggable() 

использовать также его события для использования Аякс

$("#draggable").draggable({ 
    start: function() { 
    //if data is not already getten 
    //some ajax code in there 
    } 
}); 

For more information