Jquery перетащить и привязать к сетке в кинетической JS - PullRequest
0 голосов
/ 29 февраля 2012

Эй, я выполняю операции перетаскивания, используя Kineticjs Теперь я хочу, чтобы изображения привязывались друг к другу, если они приблизятся .. Я видел животных на пляже в KineticJs, который не помог мне в моей функциональности затем увидел привязку jquery к сетке. Но если я использую это, мне придется избавиться от KineticJs. Есть какой-либо способ реализовать привязку jquery к элементам в kineticJs потому что в jquery они передали идентификатор img, чтобы сделать его перетаскиваемым, а затем привязать. Так как я могу использовать это с моими изображениями kinetic.js

jquery, перетаскиваемый: http://jqueryui.com/demos/draggable/#snap-to

kinetic.js: http://www.kineticjs.com/

Спасибо

Ashish

Ответы [ 2 ]

5 голосов
/ 05 марта 2012

Если вы ищете что-то, что привязывается к сетке 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;
        }
   }
}
0 голосов
/ 30 сентября 2013

Сначала я создаю сетку

    var grid = new Array(gridSize);
    for (var row = 0; row < gridSize; row++) {
      grid[row] = new Array(gridSize);// the columns
    }

Затем я получаю ячейку

   function current_cell(mousePos) {
      var x = mousePos.x + half_column_width;
      var y = mousePos.y + half_column_height;
      if ( (x < column_width) || (y < column_height) || (x > board_width + column_width) || (y > board_height + column_height) ) {
        return false;
      }
      x = Math.min(x, (board_width * column_width) + column_width);
      y = Math.min(y, (board_height * column_height) + column_height);
      cell_x = Math.floor(x / column_width);
      cell_y = Math.floor(y / column_height);
      if (grid[cell_x][cell_y] == undefined) { 
        grid[cell_x][cell_y] = {};
      }
      var cell = grid[cell_x][cell_y];
      cell.cell_x = cell_x;
      cell.cell_y = cell_y;
      cell.x = cell_x * piece_width;
      cell.y = cell_y * piece_height;
      return cell;
    }

, а затем при перемещении мыши

shape.on('dragmove', function() {

  var mousePos = stage.getMousePosition();
  cell = current_cell(mousePos)
  shape.setPosition(cell.x, cell.y);
});
...