【发布时间】:2021-05-14 11:44:53
【问题描述】:
在我的 Fabric js 4.3.1 项目中,我试图设置向画布添加文本的限制。我的目标是限制添加 2 个文本,每个文本区域一个。
这是我现在的代码,但它不能很好地工作,因为每次我在 textarea 中写入时,都会将一个文本添加到另一个之上,没有限制......
var canvas = this.__canvas = new fabric.Canvas('canvas');
$(function() {
canvas.setHeight('300');
canvas.setWidth('800');
canvas.renderAll();
fabric.Object.prototype.transparentCorners = false;
fabric.Object.prototype.padding = 5;
var textOptions = {
fontSize:16,
left:20,
top:20,
radius:10,
borderRadius: '25px',
hasRotatingPoint: true
};
var textOptions2 = {
fontSize:16,
left:20,
top:50,
radius:10,
borderRadius: '25px',
hasRotatingPoint: true
};
//TEXT 1
$( "#AddTextCust" ).keyup(function() {
var textObject = new fabric.IText($("#AddTextCust").val(), textOptions);
if($.trim($(this).val()).length > 0){
canvas.add(textObject);
canvas.renderAll();
}
});
document.getElementById('AddTextCust').addEventListener('keyup', function () {
canvas.getActiveObject().text = document.getElementById('AddTextCust').value;
canvas.renderAll();
});
//TEXT 2
$( "#AddTextCust2" ).keyup(function() {
var textObject = new fabric.IText($("#AddTextCust2").val(), textOptions2);
if($.trim($(this).val()).length > 0){
canvas.add(textObject);
canvas.renderAll();
}
});
document.getElementById('AddTextCust2').addEventListener('keyup', function () {
canvas.getActiveObject().text = document.getElementById('AddTextCust2').value;
canvas.renderAll();
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/4.3.1/fabric.min.js"></script>
<div id="contCanvasLogo" style="float:left;width:100%;">
<canvas id="canvas" class="resize canvasLogo" style="width:500px;height:500px;border:1px solid #ccc;"></canvas>
</div>
<textarea id="AddTextCust" rows="3" cols="20"></textarea>
<textarea id="AddTextCust2" rows="3" cols="20"></textarea>
如何设置此添加文本限制?
【问题讨论】:
-
您的代码 sn-p 不起作用。但是,如果您看到在旧文本顶部绘制的新文本,我想您需要在调用
.renderAll()之前清除画布。 -
感谢您的回复。因此,当我在 textarea 上执行 keyup 时只添加一个文本,我该如何编写代码?
-
@Ouroborus 我的代码有效,请检查此小提琴jsfiddle.net/Jackom/d28cwokz/11。正如您所看到的,当我尝试编写重叠的文本时,我希望它只打印一次。
-
用按钮确认输入怎么样
-
我更新了我的小提琴:jsfiddle.net/Jackom/d28cwokz/34 使用 canvas.clear() 文本不重叠但清除所有元素并重置我的文本在画布中的位置,这对我不利。
标签: javascript html jquery html5-canvas fabricjs