Vue3实现
<script setup>
import { ref } from 'vue';
const string1 = ref('');
const string2 = ref('');
string2.value = `噫吁嚱,危乎高哉!蜀道之难,难于上青天!蚕丛及鱼凫,开国何茫然!尔来四万八千岁,不与秦塞通人烟。西当太白有鸟道,可以横绝峨眉巅。地崩山摧壮士死,然后天梯石栈相钩连。上有六龙回日之高标,下有冲波逆折之回川。黄鹤之飞尚不得过,猿猱欲度愁攀援。青泥何盘盘,百步九折萦岩峦。扪参历井仰胁息,以手抚膺坐长叹。
问君西游何时还?畏途巉岩不可攀。但见悲鸟号古木,雄飞雌从绕林间。又闻子规啼夜月,愁空山。蜀道之难,难于上青天,使人听此凋朱颜!连峰去天不盈尺,枯松倒挂倚绝壁。飞湍瀑流争喧豗,砯崖转石万壑雷。其险也如此,嗟尔远道之人胡为乎来哉!
剑阁峥嵘而崔嵬,一夫当关,万夫莫开。所守或匪亲,化为狼与豺。朝避猛虎,夕避长蛇;磨牙吮血,杀人如麻。锦城虽云乐,不如早还家。蜀道之难,难于上青天,侧身西望长咨嗟!`
function print() {
console.log(string1.value.length, string2.value.length);
if (string1.value.length >= string2.value.length) {
// 退出递归
return;
} else {
// string1仍然比string2短,进入下一次等待和递归
setTimeout(()=>{
string1.value += string2.value.charAt(string1.value.length);
print(string1, string2);
}, 50);
}
}
</script>
<template>
<main>
<p class="text">{{ string1 }}</p>
<button @click="print"><p class="text">点击实现</p></button>
</main>
</template>
<style scoped>
.text {
font-size: 30px;
}
</style>