Как узнать, на какие элементы был перетянут блок
Всем привет!
Пишу клиентскую часть морского боя на jQuery, столкнулся с проблемой. Есть 2 панельки: одна с кораблями и вторая с доской: ![]() Доска и корабли создаются динамически через jQuery: function generateBoard() { var id = 0; for (var i = 1; i <= 10; i++) { $('<tr></tr>').appendTo('#board table'); for (var j = 1; j <= 10; j++) { id++; $('<td></td>').attr('id', id).appendTo('#board tr:last-child'); } } } Корабли перетаскиваются с помощью draggable. Доска - таблица. Все клетки имеют идентификатор от 1 до 100. Когда юзер расставит все корабли и нажмет на кнопку, данные про размещение кораблей должны уйти на сервер. Например, в виде строки, в которой указаны идентификаторы клеток, на которых расположены корабли. Так вот, как мне идентифицировать те самые клетки? То есть, как с помощью jQuery выбрать клетки, над которыми стоит корабль? Заранее спасибо. |
|
Без использования расчета координат это можно сделать?
Я вот попробовал сделать все <td> доски droppable. И при перетаскивании корабля на нее, к <td> добавлять класс: $('#board td').droppable({ hoverClass: 'dragged' }); Только вот, когда я перетаскиваю несколькопалубный корабль на доску, класс добавляется только к одной клетке (<td>) под кораблем. Может можно как-то сделать так, чтоб класс добавлялся ко всем клеткам, над которыми корабль? |
Вам нужно сделать двумерный массив. Параметрами корабля должны быть его ширина и высота. После того, как ваш корабль куда-то переместили, рассчитываете, какие ячейки в вашем массиве будут при этом заняты. После этого помечаете соответствующие td'шки в таблице.
|
Возможно всё ))
Но вам потребуется двух мерный массив с чертежом корабля. затем каждую ячейку этого массива придётся сопоставить с ячейкой вашего поля, и определить ставить ли класс, или нет. твою дивизию, чуток опоздал ))) Но раз мысли совпали, значит решение правильное. ЗЫ. Мне ближе к сердцу когда игровое поле в массиве, а не в таблице. |
Цитата:
Цитата:
|
Что-то я не совсем понял, как массивы помогут мне в решении этой проблемы. Мне все равно на их основе нужно создавать html-блоки - таблицы или дивы.
Цитата:
Мне нужно, чтоб ячейки поля увидели, что над ними стоит корабль и добавили к себе класс или еще какую-нибудь метку. |
Цитата:
Ты что их тоже в html хранить будешь :D Цитата:
Цитата:
по делу установка без проверки, пример на массивах. ship массив с кораблём, map игровая карта. x,y это координаты установки. setShip (x,y){ for (var yShip=0;yShip<4;yShip++){ for (var xShip=0;xShip<4;xShip++){ if ( ship[XShip,yShip] > 0 ) map[x+XShip,y+yShip ]=1; } } } Установка корабля с проверкой возможности установки. функция вернёт false если корабль установить не удалось. setShip (x,y){ var test=0; // циклы проверяют возможность установки. for (var yShip=0;yShip<4;yShip++){ for (var xShip=0;xShip<4;xShip++){ if ( ship[xShip,yShip] > 0 && map[x+xShip,y+yShip ]>0) { test++;break}; } } // если установка возможна, то копируем корабль из одного массива в другой if (test==0){ for (var yShip=0;yShip<4;yShip++){ for (var xShip=0;xShip<4;xShip++){ if ( ship[xShip,yShip] > 0 ) map[x+xShip,y+yShip ]=1; } } // если всё ништяк тогда true return true; } else { // если установка невозможна, вернём false return false; } } Ты не обижайся за критику. Тут не мало профи, так что есть смысл их слушать. Есть разница между данными и представлением. Твоя таблица это представление. Все профи хотят изолировать данные от представления, потому что так код яснее, и им проще оперировать. А сложную программу без такого подхода и вовсе написать невозможно, человеческий мозг просто невывезет такую кашу. Вот поэтому массив а не таблица. |
Дурной, штоле? Двухмерный массив - это твоё поле. У корабля есть ширина и высота - ship.width и ship.height. С ячейками массива сопоставлены td'шки. При драгге в ячейку - в массиве помечаешь нужные ячейки, исходя из ширины/высоты корабля. Помечаешь нужные td'шки.
|
Часовой пояс GMT +3, время: 23:05. |