我想添加Textbox
或可编辑元素给用户编辑文本的选项。
这是我当前的代码:
var text = new Kinetic.Text({
text: "Sample Text", ---> i want to edit this text
x: 50,
y: 10,
fill: "transparent",
fontSize: 10,
fontFamily: "Helvetica Neue",
textFill: "#000",
align: "center",
verticalAlign: "middle",
name:'TEXT'
});
目前似乎没有要任何方法来创建可编辑的文本与动力学JS(看到这个在计算器几个线程),有人建议用旁边的画布上输入字段编辑的文本,但我的解决办法是以下:
- 创建你的代码的文本
- 在文字点击[text.on(“点击”,功能...],就在你的鼠标光标创建一个输入字段
那么,that's计划。 也许it's更易于使用“保存”按钮,文本输入字段,让你知道什么时候关闭它,当输入字段数据存储到动力学文本。 您还需要一个“关闭”功能,如果你不想将编辑。
一个非常简单的解决方案也将是一个简单的JavaScript提示:
var xy = prompt("gimme your text");
所以,这样的事情将是最好的解决方案恕我直言:
myText.on('click', function(evt) {
this.setText(prompt('New Text:'));
layer.draw(); //redraw the layer containing the textfield
});
我做了一个实际KinetiJS与可编辑文本的功能插件的尝试。
我知道这是重新发明轮子,当你能够悬停文本区域,但为什么不把它仅仅在画布太大。
检查插件出在: https://github.com/nktsitas/kineticjs-editable-text
我做了一些这方面的天回我的项目。 野兔是代码片段。 基本上,我们先画出矩形,然后把文本区域里面,最后将其转换成kinetic.text节点。
drawText: function ( color )
{
var layer1=this.model.stage.getLayers()[0];
var $this=this;
console.log('drawText: color: ' + color);
if($this.rectangleDrawn==true)
{
var down = false, oPoint;
layer1.off("mousedown touchstart mousemove touchmove mouseup touchend");
if(group!=undefined && group!='')
{
$this.hideAnchors(group);
}
console.log("textX: "+textX);
//after rectangle is drawn we now have to add the editablesection
$('<textarea id="text" type="text" width='+textWidth +'px height='+textHeight+'px style="font-size: 30px;font-family:Calibri;height:'+textHeight+'px;width:'+textWidth+'px;position:absolute'+';left:'+textX+'px'+';top:'+textY+'px'+';z-index:5'+';background-color:#ffcc00;"></textarea>')
.insertBefore('.kineticjs-content');
$('#text').on('blur',function()
{
console.log("textchange");
text = new Kinetic.Text( {
x: textX,
y: textY,
stroke: color,
strokeWidth: 1,
fontSize: 30,
fontFamily: 'Calibri',
clearBeforeDraw: false,
name: 'image'+layer1.getName(),
draggable: true,
height: textHeight,
width: textWidth,
text: $('#text').val()
} );
text.on( 'mouseleave dbltap', function ()
{
text=this;
} );
$('#text').remove();
layer1.add( text );
layer1.draw();
})
},drawRectangle: function ( opacity, colorFill,stroke,textColor ){rect = new Kinetic.Rect({
x: mousePos.x,
y: mousePos.y,
width: 0,
height: 0,
stroke: stroke,
strokeWidth: 4,
opacity: opacity,
clearBeforeDraw: false,
name: 'image'+layer1.getName()
});
layer1.on( "mouseup touchend", function ( e )
{
console.log("rectangle: mouseup");
console.log("width: "+rect.getWidth( ));
rect.setOpacity(opacity);
rect.setFill(colorFill);
layer1.draw();
down = false;
console.log("textColor: "+textColor)
if(textColor!=undefined)
{
textWidth=rect.getWidth( );
textHeight=rect.getHeight( );
textX = rect.getAbsolutePosition().x;
textY=rect.getAbsolutePosition().y;
$this.rectangleDrawn=true;
$this.drawText(textColor);
console.log("textdrawn ");
$this.group.remove();
}
},