2017-02-15 87 views
0

文字我已經找到一種方法,能夠調整和擠壓我的文字正常HTML5畫布用下面的代碼:如何調整畫布

$("input").on("input", function() { 
ctx.clearRect(0, 0, 400, 400); 
var width = ctx.measureText(text).width; 
if(width <= 100) { 
    ctx.fillText(text, 0, 100); 
} else { 
    ctx.save(); 
    ctx.scale(100/width, 1); 
    ctx.fillText(text, 0, 100); 
    ctx.restore(); 
} 

});

我想做同樣的事情,但使用FabricJS。有什麼方法可以做到嗎?

+0

我想澄清,使得當對象幀是在畫布的最大寬度,而不是調整大小上高度(Y軸),即,當我想如果文本太長,就把文本擠在一起。 – user5749747

+0

另一個限制,我也使這樣的對象被限制爲畫布的大小,他們不能關閉 – user5749747

回答

0

對沒錯,只是檢查文本元素的寬度您創建完成後,並將其添加到畫布前,如果需要設置scaleX屬性:

var canvas = new fabric.Canvas('c'); 
    var t; 

    canvas.renderAll(); 

    $("input").on("input", function() { 
     if (t) { 
      canvas.remove(t); 
     } 
     var textToDraw = $(this).val(); 
     t = new fabric.Text(textToDraw, { 
      left: 0, 
      top: 0 
     }); 
     if (t.width > c.width) { 
      console.log('scale -> ' + (c.width/t.width)); 
      t.setScaleX(c.width/t.width); 
     } 
     canvas.add(t); 
    }); 

如果你想做到這一點的對象調整大小,使用修改後的事件處理程序,像這樣:

function scaleText() { 
     console.log("scale=" + t.getScaleX() + " w=" + t.getWidth()); 
     if ((t.width * t.getScaleX()) > c.width) { 
      t.setScaleX(c.width/t.width); 
     } 
    } 

    $("input").on("input", function() { 
     if (t) { 
      canvas.remove(t); 
     } 
     var textToDraw = $(this).val(); 
     t = new fabric.Text(textToDraw, { 
      left: 0, 
      top: 0 
     }); 
     scaleText(); 

     t.on("modified", function (options) { 
      scaleText(); 
     }); 

     canvas.add(t); 
    }); 
+0

我遇到的問題是,當有人調整文本對象時,我需要能夠調整大小文本,而不是在寫入畫布之前。 – user5749747

+0

你真的不清楚你想要達到什麼目的,你能製作一個jsFiddle或類似的來說明問題嗎? –

+0

我正在嘗試做所提到的事情,但在文本寫入畫布後進行。 – user5749747