2013-10-07 7 views
1

확대/축소 효과에 다음 코드를 사용하고 있습니다. 문제는 캔버스에서 클립을 스트로크 색상으로 동그라미로 찍은 다음이 줌 인을 수행하는 것입니다. 모든 요소가 확대되었지만 클립 영역이 확대되지 않았습니다. 확대/축소 할 클립 영역은 어떻게 만들 수 있습니까?클립 영역에서 캔버스가 작동하지 않습니다.

클립 방법 ::

canvas.clipTo = function(ctx) { 
         var shp = new fabric.Rect({ 
          top : top_Pos, 
          left : left_Pos, 
          width : c_width, 
          height : c_height, 
          fill:'', 
          stroke : 'red', 
          strokeWidth : 5 

         }); 
         shp.render(ctx); 
        }; 

확대 방법 ::

// Zoom In 
    function zoomIn() { 
     // TODO limit the max canvas zoom in 
     console.log('zoom in called'); 
     if (zoomEffect == false) { 

      canvasScale = canvasScale * SCALE_FACTOR; 

      canvas.setHeight(canvas.getHeight() * SCALE_FACTOR); 
      canvas.setWidth(canvas.getWidth() * SCALE_FACTOR); 

      var objects = canvas.getObjects(); 
      for (var i in objects) { 
       var scaleX = objects[i].scaleX; 
       var scaleY = objects[i].scaleY; 
       var left = objects[i].left; 
       var top = objects[i].top; 

       var tempScaleX = scaleX * SCALE_FACTOR; 
       var tempScaleY = scaleY * SCALE_FACTOR; 
       var tempLeft = left * SCALE_FACTOR; 
       var tempTop = top * SCALE_FACTOR; 

       objects[i].scaleX = tempScaleX; 
       objects[i].scaleY = tempScaleY; 
       objects[i].left = tempLeft; 
       objects[i].top = tempTop; 

       objects[i].setCoords(); 
      } 

      canvas.renderAll(); 
      zoomEffect = true; 
     } 
    } 

    // Zoom Out 
    function zoomOut() { 
     // TODO limit max cavas zoom out 
     console.log('zoom out called'); 
     if (zoomEffect == true) { 

     canvasScale = canvasScale/SCALE_FACTOR; 

     canvas.setHeight(canvas.getHeight() * (1/SCALE_FACTOR)); 
     canvas.setWidth(canvas.getWidth() * (1/SCALE_FACTOR)); 

     var objects = canvas.getObjects(); 
     for (var i in objects) { 
      var scaleX = objects[i].scaleX; 
      var scaleY = objects[i].scaleY; 
      var left = objects[i].left; 
      var top = objects[i].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); 

      objects[i].scaleX = tempScaleX; 
      objects[i].scaleY = tempScaleY; 
      objects[i].left = tempLeft; 
      objects[i].top = tempTop; 

      objects[i].setCoords(); 
     } 
      } 
     canvas.renderAll(); 
      zoomEffect = false; 
    } 

답변

0

사용 canvas.zoomToPoint(point,zoomFactor);

+2

코드는이 질문에 대한 대답 이유에 대한 설명을 추가하십시오. 그렇지 않으면 저조한 게시물로 표시 될 가능성이 큽니다. –

관련 문제