vue.js - 如何在不断字的情况下用 vue-typer 断行
问题描述
我正在使用 vue-typer,它会根据空间在屏幕上进行调整。但是,根据屏幕的大小,vue-typer 会打断单词。我想在我们有退格键的时候休息。代码是:
<vue-typer
class="text-h4 font-weight-bold"
text="Nós acreditamos que o futuro pode ser incrível. Quer criar
ele com a gente?" :repeat='0'
></vue-typer><br>
解决方案
我不知道是否有人仍在处理这个问题,我已经写了一个快速修复这个问题。它并不完美,但可以完成工作。
您将通过一个方法运行文本,该方法将自动添加换行符。
<div
style="
font-size: 30pt;
margin: auto;
color: white;
max-width: 600px;
"
ref="theRef"
>
<vue-typer
v-if="startTypers"
:text="[
formatText(
'TextHere',
'theRef',
22
),
]"
:repeat="0"
:shuffle="false"
initial-action="typing"
:pre-type-delay="70"
:type-delay="70"
:pre-erase-delay="2000"
:erase-delay="100"
erase-style="backspace"
:erase-on-complete="false"
caret-animation="blink"
></vue-typer>
</div>
mounted() {
setTimeout(() => {
this.startTypers = true;
}, 150);
}
startTypers 的原因是因为它们会在 div 被渲染之前运行 formatText 方法。这意味着您将无法获得父 div 的 clientWidth。
formatText(text, ref, textSize = 22) {
let maxChars = Math.floor(this.$refs[ref].clientWidth / textSize);
let words = text.split(" ");
let breaked = "";
let currentCount = 0;
words.forEach((word) => {
currentCount += word.length;
currentCount += 1;
if (currentCount >= maxChars) {
currentCount = word.length;
breaked = `${breaked}\n${word} `;
} else {
breaked = `${breaked}${word} `;
}
});
return breaked;
},
formatText 的参数是您要添加换行符的文本、引用的名称和渲染的跨度(字符)的大小(22 是我使用的字体和字体大小的默认值在我的用例中,你的会有所不同)
希望这会有所帮助
推荐阅读
- kotlin - 为什么我可以在 Kotlin 中使用 Observer(adapter::submitList) 而不是 Observer { adapter.submitList(it)?
- python-3.x - 模块“tensorflow”在 Colab 中没有带有 TFANN 的属性“variable_scope”
- java - 具有自定义注释的字段的 Gson 自定义序列化
- c - typedef struct变量赋值中的typedef struct在c中不起作用
- python - 在 for 循环中使用 pandas csv_read 读取 csv 文件
- python - 如何从特定索引之前的列表中找到最大的数字?
- ffmpeg - ffmpeg:加入+交叉淡入淡出5个输入文件(视频+音频)到一个输出文件
- flutter - 用户单击后退按钮后颤振重新开始
- javascript - 环境变量反应
- python-3.x - 如何使用 Python3 以高效的方式将 .csv 文件从 S-3 存储桶上传到 Redshift 作为特定模式下的新表?