Если вы ищете что-то, что привязывается к сетке nxm, вам нужно добавить слушателя, который вызывает функцию, которая привязывает это.Возможно, вы захотите сделать это в «dragend»
http://www.html5canvastutorials.com/kineticjs/html5-canvas-drag-and-drop-events-tutorial/
box.on("dragend", function(){
snaptogrid(box);
});
... 100x100 для квадратных плиток
function snaptogrid(YourObject){
YourObject.x = Math.floor(YourObject.x/100) * 100 + 50;
YourObject.y = Math.floor(YourObject.y/100) * 100 + 50;
}
ex: ifYourObject.x = 325, тогда у вас будет Math.floor (3.25) * 100 + 50 = 350. Левая и верхняя части должны быть на 300, а центр на 350.
Редактировать,упс пропустил часть вопроса.Для привязки к другим квадратам я бы сделал вот что:
function snaptoOther(YourSquares, index){
var lastone = YourSquares.length-1;
var maxDist = 125;
var minDist = 75;
var squarelength = 100;
for(var i=0; i<lastone; i++)
{
var checkx = abs(YourSquares[index].x - YourSquares[i].x);
var checky = abs(YourSquares[index].y - YourSquares[i].y);
var multiplyX = Math.round((YourSquares[index].x - YourSquares[i].x)/squarelength);
var multiplyY = Math.round((YourSquares[index].y - YourSquares[i].y)/squarelength);
if(checkx < maxDist && checkx > minDist && i !== index)
{
YourSquares[index].x = YourSquares[i].x + multiplyX*squarelength;
}
if(checky < maxDist && checky > minDist && i !== index)
{
YourSquares[index].y = YourSquares[i].y + multiplyY*squarelength;
}
}
}