При перемещении элемента происходит событие sortchange
.Второй параметр этого события содержит информацию об элементе, который был перемещен.Свойство, которое вы ищете, это .offset
, которое дает вам позицию только что перемещенного элемента.Чтобы получить строку, разделите ui.position.top
на height
элемента и добавьте единицу.Чтобы получить столбец, разделите ui.position.left
на width
элемента и добавьте один.
Демонстрация: http://jsfiddle.net/ThinkingStiff/BfzsJ/
Скрипт:
$( "#sortable" ).sortable();
$( '#sortable' ).bind( 'sortchange', function( event, ui ) {
var width = event.target.clientWidth,
height = event.target.clientHeight,
top = this.offsetTop,
left = this.offsetLeft;
document.getElementById( 'position' ).textContent =
' row: ' + Math.floor( ( Math.abs( ui.offset.top + top ) / height ) + 1 )
+ ' col: ' + Math.floor( ( Math.abs( ui.offset.left + left ) / width ) + 1 ) ;
} );
HTML:
<div id="position">row: n/a col: n/a</div>
<ul id="sortable">
<li class="ui-state-default">1</li><!--
--><li class="ui-state-default">2</li><!--
--><li class="ui-state-default">3</li><!--
--><li class="ui-state-default">4</li><!--
--><li class="ui-state-default">5</li><!--
--><li class="ui-state-default">6</li><!--
--><li class="ui-state-default">7</li><!--
--><li class="ui-state-default">8</li><!--
--><li class="ui-state-default">9</li>
</ul>
CSS:
#sortable {
list-style-type: none;
margin: 0;
padding: 0;
position: relative;
width: 325px;
}
#sortable li {
display: inline-block;
font-size: 4em;
height: 100px;
position: relative;
text-align: center;
vertical-align: top;
width: 100px;
}
Вывод: