3

我的动力学有问题。

如何从包含两个矩形的组中获取getHeight()和获取?getWidht()

这是我的代码:

var mygrup=new Kinetic.Group({
name:"mygrup",


draggable:true  
})

layer.draw()

var tool= new Kinetic.Rect({
       width: 50,
      height: 20,
      x:0,
      y:20,
      fill: '#'+(0x1000000+(Math.random())*0xffffff).toString(16).substr(1,6),

      name:"image",

    });
var tool1= new Kinetic.Rect({
       width: 50,
      height: 20,
      x:0,
      y:0,
      fill: '#'+(0x1000000+(Math.random())*0xffffff).toString(16).substr(1,6),

      name:"image",


    });
mygrup.add(tool1).add(tool)
4

4 回答 4

3
  var children = mygrup.getChildren();
  var width = 0;
  for( var i=0; i< children.length; i++){
      if(children[i].getWidth() > width)
          width = children[i].getWidth(); 
  }

这将获得任何元素的最大宽度,但重要的部分是获取组的所有子元素,然后遍历它们。您可以对宽度求和,也可以获取所有 x 值并取最左边的值和最右边的值,然后将其设为您的宽度。或者是其他东西。

于 2013-03-11T13:34:17.547 回答
1

也许更好的方法是遍历所有的孩子并通过考虑形状宽度来找到 minX、minY、maxX 和 maxY。该组的宽度和高度将是:

变量宽度 = maxX - minX; 变量高度 = maxY - minY;

group.getWidth() 和 group.getHeight(),如果将来实施,将采用类似的方法。

于 2013-03-15T19:49:13.637 回答
0

SoluableNonagon 实现的嵌套(递归)解决方案

function getMaxWidth(root_node){

   var min_x = Number.MAX_VALUE //window.innerWidth(),
       max_x = 0;


   var maxWidth = function recur(node){
       var children = node.getChildren();

       if (children.length === 0) 
           return node.getAbsoluteX();


       for(var i=0; i< children.length; i++){
           var pos = recur(children[i]);

           if (pos > max_x) max_x = pos;
           else if (pos < min_x) min_x = pos;
       }
   }

   return maxWidth(root_node);
}
于 2015-02-20T14:31:44.113 回答
0

我的解决方案考虑了重叠的元素以及它们之间有间隙的元素(当它们不接触时)。它还返回 x/y 位置(因为我需要它)。

getGroupSize = function (pGroup) {
    var minX = Number.MAX_VALUE,
        maxX = 0,
        minY = Number.MAX_VALUE,
        maxY = 0;
    var children = pGroup.getChildren();
    if (children.length === 0) {
        minX = pGroup.getX();
        maxX = minX + pGroup.width();
        minY = pGroup.getY();
        maxY = minY + pGroup.height();
    }
    else {
        var groupX = pGroup.getX();
        var groupY = pGroup.getY();
        for (var i = 0; i < children.length; i++) {
            var size = this.getGroupSize(children[i]);
            size.minX += groupX;
            size.maxX += groupX;
            size.minY += groupY;
            size.maxY += groupY;
            if (size.minX < minX) {
                minX = size.minX;
            }
            if (size.maxX > maxX) {
                maxX = size.maxX;
            }
            if (size.minY < minY) {
                minY = size.minY;
            }
            if (size.maxY > maxY) {
                maxY = size.maxY;
            }
        }
    }
    return { minX: minX, maxX: maxX, minY: minY, maxY: maxY, width: maxX - minX, height: maxY - minY };
};

于 2016-02-29T14:11:08.660 回答