2017-08-16 62 views
1

如何固定文本框的大小以防止在輸入時固定大小(固定寬度和高度)?Fabricjs固定文本框

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

var text = new fabric.Textbox('MyText', { 
    width: 300, 
    height: 300, 
    top: 5, 
    left: 5, 
    hasControls: false, 
    fontSize: 30, 
    fixedWidth: 300, 
    fixedFontSize: 30 
}); 
canvas.add(text); 

http://jsfiddle.net/643qazk0/2/

回答

0

您可以覆蓋insertChars方法,並檢查文本溢出。

查看下面的代碼片段。

// Create canvas 
 
const canvas = new fabric.Canvas(document.querySelector('canvas')); 
 

 
// Define `LimitedTextbox` class which extends `Textbox` 
 
const LimitedTextbox = fabric.util.createClass(fabric.Textbox, { 
 

 
    // Override `insertChars` method 
 
    insertChars: function(chars) { 
 

 
    if (this.maxWidth) { 
 
     const textWidthUnderCursor = this._getLineWidth(this.ctx, this.get2DCursorLocation().lineIndex); 
 
     if (textWidthUnderCursor + this.ctx.measureText(chars).width > this.maxWidth) { 
 
     chars = '\n' + chars; 
 
     } 
 
    } 
 

 
    if (this.maxLines) { 
 
     const newLinesLength = this._wrapText(this.ctx, this.text + chars).length; 
 
     if (newLinesLength > this.maxLines) { 
 
     return; 
 
     } 
 
    } 
 

 
    // Call parent class method 
 
    this.callSuper('insertChars', chars); 
 
    } 
 

 
}); 
 

 
// Create limited text box with max width 300px and max 2 lines 
 
canvas.add(
 
    new LimitedTextbox('text', { 
 
    top: 10, 
 
    left: 10, 
 
    width: 300, 
 
    maxWidth: 300, 
 
    maxLines: 2 
 
    }) 
 
); 
 

 
canvas.renderAll();
.canvas-container { 
 
    border: 1px solid gray; 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.7.20/fabric.js"></script> 
 

 
<canvas width="600" height="300"></canvas>

測試了織物1.7.20