大写 Fabric JS 上的文本输入

Posted

技术标签:

【中文标题】大写 Fabric JS 上的文本输入【英文标题】:Capitalize text input on Fabric JS 【发布时间】:2017-11-10 03:59:56 【问题描述】:

我有一个 html5 画布,我打算在上面写字。我正在使用 FabricJS。但是,我希望文本输入为大写,而用户不必使用“大写锁定”。

我试过了

textbox.hiddenTextarea.autoCapitalize = "on";

let textbox = new fabric.IText("", textAlign: "居中", 自动大写:“开”,

我也试过了:

textbox.hiddenTextarea.onkeyup = (e) => e.target.value = e.target.value.toUpperCase();

没有任何效果。做我想要实现的目标的正确方法是什么?或者有什么黑客吗?请指出正确的方向。

【问题讨论】:

我正在尝试做同样的事情,但我认为 fabric.js IText 上没有 autoCapitalize 属性。文档中没有列表。你从哪里得到这个属性的? 【参考方案1】:

您可以使用这种语法。 那么请获取activeObject。

activeObject.set('fontCharacterStyle', 'Caps');

【讨论】:

它不起作用,你有关于fabricjs这个属性的任何文档吗? @ThoBuiNgoc 感谢评论,但亲爱的,我在我的项目中为 fabricjs 3.1.0 版本使用了相同的代码,它对我有用 你需要自定义fabricjs来使用这个属性设置吗?我在 fabricjs 源代码中寻找这个属性,但我找不到这个属性。你能给我一个演示代码来解决这个问题吗?谢谢! 我没有做任何事情或自定义,我刚刚为我的项目选择了fabricjs 3.1.0,并简单地获取了文本的activeobject并使用了这段代码。 activeObject.set('fontCharacterStyle', 'Caps');【参考方案2】:

我创建了一个 IText 的子类以允许将 textTransformation 设置为大写:

const TransformableText = fabric.util.createClass(fabric.IText, 
  _splitTextIntoLines: function() 
    const transformedText = this.textTransform === 'uppercase' ? this.text.toUpperCase() : this.text;

    return this.callSuper('_splitTextIntoLines', transformedText);
  ,
);

可以用作:

const textbox = new TransformableText("",  textTransform: "uppercase" );

【讨论】:

以上是关于大写 Fabric JS 上的文本输入的主要内容,如果未能解决你的问题,请参考以下文章

iPhone强制文本框输入为大写

使用 fabric.js 在画布上绘制文本

js和css 控制文本框英文字母大写

强制文本输入为大写

将输入文本转换为大写

将文本输入的第一个字符大写