Código:
El problema es que no he podido hacer que se agrupen, es decir el método push no me funciona.<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>Movable and Re-sizable Raphael JS Shape</title> </head> <body> <div id="paper"></div> <script src="jquery.min.js"></script> <script src="raphael-min.js"></script> <script> (function() { var dragStart = function() { // Save some starting values this.ox = this.attr('x'); this.oy = this.attr('y'); this.ow = this.attr('width'); this.oh = this.attr('height'); this.dragging = true; }; var dragMove = function(dx, dy) { // Inspect cursor to determine which resize/move process to use switch (this.attr('cursor')) { case 'nw-resize' : this.attr({ x: this.ox + dx, y: this.oy + dy, width: this.ow - dx, height: this.oh - dy }); break; case 'ne-resize' : this.attr({ y: this.oy + dy , width: this.ow + dx, height: this.oh - dy }); break; case 'se-resize' : this.attr({ width: this.ow + dx, height: this.oh + dy }); break; case 'sw-resize' : this.attr({ x: this.ox + dx, width: this.ow - dx, height: this.oh + dy }); break; default : this.attr({ x: this.ox + dx, y: this.oy + dy }); break; } }; var dragEnd = function() { var box = this.getBBox(); var ref = contenedor.getBBox(); if (box.x > ref.x && box.y > ref.y && box.x2 < ref.x2 && box.y2 < ref.y2) { alert("Está adentro"); sector.push(this,contenedor); } this.dragging = false; }; var changeCursor = function(e, mouseX, mouseY) { // Don't change cursor during a drag operation if (this.dragging === true) { return; } // X,Y Coordinates relative to shape's orgin var relativeX = mouseX - $('#paper').offset().left - this.attr('x'); var relativeY = mouseY - $('#paper').offset().top - this.attr('y'); var shapeWidth = this.attr('width'); var shapeHeight = this.attr('height'); var resizeBorder = 10; // Change cursor if (relativeX < resizeBorder && relativeY < resizeBorder) { this.attr('cursor', 'nw-resize'); } else if (relativeX > shapeWidth-resizeBorder && relativeY < resizeBorder) { this.attr('cursor', 'ne-resize'); } else if (relativeX > shapeWidth-resizeBorder && relativeY > shapeHeight-resizeBorder) { this.attr('cursor', 'se-resize'); } else if (relativeX < resizeBorder && relativeY > shapeHeight-resizeBorder) { this.attr('cursor', 'sw-resize'); } else { this.attr('cursor', 'move'); } }; // Create drawing area var paper = Raphael("paper", 800, 800); var sector = paper.set(); var contenedor = paper.rect(60,60,100,80).attr({fill:"#759dcd", stroke:'#3b5068', 'stroke-width':8}).mousemove(changeCursor).drag(dragMove, dragStart, dragEnd); var element = paper.rect(40,40,100,80).attr({fill:"#759dcd", stroke:'#3b5068', 'stroke-width':3}).mousemove(changeCursor).drag(dragMove, dragStart, dragEnd); })(); </script> </body> </html>
Saludos