vue 打字机动画效果

//html部分
<div v-html="pages(item)" class="right_vip" :id="index_list(index)" v-for="(item,index) in list" :key="index">
 </div>
<div flex="dir:top main-cross:center" style="-moz-user-select: none; " onselectstart = "return false;"    class="right" >
    <div class="contentss" id="niu" ref="right"></div>
</div>

<div v-show="jiantou_S"> //这是翻页的加减
      <div v-show="activeIndex_1" class="jiantou" @click="add"></div>
      <div  v-show="jiantou_1" class="jiantou jiantou_1" @click="reduce"></div>
</div>
html讲解:首先 用v-html是为了让内容里的div span 能够使用起来,id是为了展示多页的时候去展示的,因为我这个动画是多页的,多以每次点击的时候 获取id下的内筒,喜欢呢是因为 有几个数组 就是几页
//props部分
props:{
    list:{
       type:Array,
       default: () => []
    }, 
}
html讲解:我把这个功能封装成了一个公共的 当做一个模板 所以需要接受一下list
//data部分 
 data() {
        return {
        activeIndex: 0,
        mss:"",
        }
 }
 data讲解:如果打字效果需要有多页的需求就用这个参数
//js部分
add(){
            clearInterval(this.mss)
            let box_s = document.getElementById(`niu`);
            box_s.innerText = '';
            this.activeIndex++
            this.$nextTick( ()=> {
               this.dingshi()
            }); 
            let lengs = this.list.length-1
            if(this.activeIndex==lengs){
                this.activeIndex_1=false
                this.jiantou_1=true
            }
        },
        reduce(){
             clearInterval(this.mss)
            let box_s = document.getElementById(`niu`);
            box_s.innerText = '';
            this.activeIndex--
             this.$nextTick( ()=> {
               this.dingshi()
            });
            if(this.activeIndex==0){
                this.activeIndex_1=true
                this.jiantou_1=false
            }
        },
pages(item){
  return     item.title.replace(/#/g,'<br/>').replace(/\$/g,'<div>').replace(/%/g,'</div>').replace(/@/g,'<span style="opacity:0">你</span>')
 },
pages 讲解:就是为了把div span 什么的不会把咱定义的当成字符串去展示,因为在数组里用#$@代表了不同的作用打印的时候需要把这个标识替换掉
  index_list(index){
      return "num_"+index
  },
 index_list讲解: 既然是动态的id需要在方法里动态生成一下
 dingshi(){
            
           clearInterval(typing)
           let box = document.getElementById(`num_${this.activeIndex}`);
           let niu_s = document.getElementById(`niu`);
           niu_s.style.height = box.offsetHeight+"px"
           console.log(this.$refs.right.style)
           let str = this.list[this.activeIndex].title;
            let box_s = document.getElementById(`niu`);
            box_s.innerText = '';
            console.log(str)
            let i = 0;
            let typing = setInterval(()=> {
                let aa=str[i++]
                if(aa=="#"){
                    box_s.innerHTML += '<br/>';
                } else if(aa=="$"){
                    box_s.innerHTML += '<div>';
                }else if(aa=="%"){
                    box_s.innerHTML += '</div>';
                }else if(aa=="@"){
                    box_s.innerHTML += '<span style="opacity:0">你</span>';
                }
                else {
                    box_s.innerHTML += aa;
                }
              i >= str.length && clearInterval(typing);
            },50);
            this.mss = typing
            console.log(box_s.innerText)
       },
       dingshi这一段js就不用了说了
mounted() {
   setTimeout( ()=> {
       this.dingshi()
    },4000); 
   
    },
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端代码の搬运工

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值