FabricJS Catch click on object inside group

后端 未结 7 747
感动是毒
感动是毒 2021-01-17 19:06

I have tried many thing like calculating location, handling with the event we do have in original fabricjs. Does any have done this before?

7条回答
  •  孤独总比滥情好
    2021-01-17 19:30

    May be this helps you http://jsfiddle.net/UKbaseduser/Kt9Mk/1/

    $("#1").click(function(){
      ZoomIn('tmp1');
    });
    $("#2").click(function(){
      ZoomOut('tmp1');
    });
    $("#3").click(function(){
      ZoomIn('tmp2');
    });
    $("#4").click(function(){
      ZoomOut('tmp2');
    });
    
    var canvas = new fabric.Canvas('c');
    
    var rect1 = new fabric.Rect({ left: 150, top: 150, width: 100, height: 100, fill: 'green'});
    var rect2 = new fabric.Rect({ left: 250, top: 250, width: 100, height: 100, fill: 'green'});
    rect1.grp='tmp1';
    rect2.grp='tmp1';
    var c = new fabric.Circle({
            left: 200,
            top: 200,
            radius: 50,
            fill: 'red',
            opacity:0.8
          });
    c.grp='tmp2';
    canvas.add(rect1);
    canvas.add(rect2);
    canvas.add(c);
    canvas.renderAll();
    
    function ZoomIn(inGrp){
        var SCALE_FACTOR = 1.2;
        var objects = canvas.getObjects();
        objects.forEach(function(obj){
            if (obj.grp==inGrp){     
                var scaleX = obj.scaleX;
                var scaleY = obj.scaleY;
                var left = obj.left;
                var top = obj.top;
    
                var tempScaleX = scaleX * SCALE_FACTOR;
                var tempScaleY = scaleY * SCALE_FACTOR;
                var tempLeft = left * SCALE_FACTOR;
                var tempTop = top * SCALE_FACTOR;
                obj.scaleX = tempScaleX;
                obj.scaleY = tempScaleY;
                obj.left = tempLeft;
                obj.top = tempTop;
                obj.setCoords();
                }
            });
        canvas.renderAll();
     }
    function ZoomOut(inGrp){
        var SCALE_FACTOR = 1.2;
        var objects = canvas.getObjects();
        objects.forEach(function(obj){
            if (obj.grp==inGrp){     
                var scaleX = obj.scaleX;
                var scaleY = obj.scaleY;
                var left = obj.left;
                var top = obj.top;
    
                var tempScaleX = scaleX * 1/SCALE_FACTOR;
                var tempScaleY = scaleY * 1/SCALE_FACTOR;
                var tempLeft = left * 1/SCALE_FACTOR;
                var tempTop = top * 1/SCALE_FACTOR;
                obj.scaleX = tempScaleX;
                obj.scaleY = tempScaleY;
                obj.left = tempLeft;
                obj.top = tempTop;
                obj.setCoords();
                }
            });
        canvas.renderAll();
     }
    

    Also there is similar discussion going on over here https://groups.google.com/forum/#!topic/fabricjs/hQwHxGfyx6w may be it throws you some pointers.

提交回复
热议问题