纯前端实现打字机效果

前端实现打字机效果一个简单的方法就是采用定时器做字符串拼接,让文字一个一个显示出来,可以使用间隔定时器setInterval来控制文字拼接的速度

 一、用一个div来显示打字机文本内容

<div class="msg-text cursor-ani">{{ dialogueAnswer }}</div>

二、字符串拼接实现

1、在data里定义以下几个变量

data() {
  return {
    answer: "", // 打字机内容
    timer: null, // 定时器
    interTime: 10, // 初始化间隔时间
    interArr: [20, 30, 10, 20, 80, 30, 15, 400, 50, 20], // 为了使打字机效果更真实间隔时间设置了一个数组,单位是ms
  }
}

2、文本处理 

// 接收后端websocket返回的内容
receverMessage(e) {
  console.log(e, '------------接收数据')
  if (e.data) {
      this.answer = e.data.content; // 打字机文本内容
      clearInterval(this.timer); // 清除定时器
      this.timer = setInterval(this.setContent, this.interTime);
   }
},

setContent() {
  if (this.dialogueAnswer.length >= this.answer.length) {
    // 说明文本已全部输出,清除定时器,结束执行
    clearInterval(this.timer);
    return;
  } else {
    this.dialogueAnswer += this.answer.charAt(this.dialogueAnswer.length);
    this.interTime = this.interArr[Math.floor(Math.random() * 10)];
    clearInterval(this.timer);
    this.timer = setInterval(this.setContent, this.interTime);
  }
}

有几个需要注意的地方:

1)charAt()函数,该方法参数为一个整数,也就是索引下标,返回值是下标对应的字符

2)Math.floor(Math.random() * 10),floor向下取整,随机生成0-9的整数,从而实现每次定时器的间隔时间不同

3)特别需要注意setInterval(fn, time)想要做到间隔时间不同,不能简单的修改time的时间,这样是不会生效的,必须先清除定时器再重新定义,重新设置时间参数

三、光标闪烁动画效果

为了让打字机效果更真实,更像输入的效果,可以做一个光标动画,模拟输入,这里是通过伪类实现的

.cursor-ani {
   position: relative;
}

.cursor-ani::after {
   content: '';
   position: absolute;
   width: 1px;
   height: 16px;
   background: #333;
   transform: translateX(3px) translateY(3px);
   animation: cursor-blinks 0.8s infinite forwards;
}

@keyframes cursor-blinks {
   from {
     opacity: 0;
   }

   to {
     opacity: 1;
   }
}

四、效果

 这世界很喧嚣,做你自己就好

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值