vue+animate.css 手动挂载dom结构实现连续动画效果

1、animate.css是一款前端动画库,有丰富的动画效果,官网中相应的效果例子https://daneden.github.io/animate.css/

2、我们可以通过以下方式进行安装:

npm install animate.css --save-dev

3、vue文件的script中引入:

import animate from 'animate.css'

4、我们可以将animate.css的动画效果运用在过渡上面,例如:

<transition enter-active-class="zoomIn" leave-active-class="zoomOut">
    <div v-show="animateShow" class="animated" >{{messageText}}</div>
</transition>

5、以上的方式存在一个问题,当动画连续出现时,会出现动画效果不连贯,我们可以通过手动挂载dom元素进行连续动画效果。我们可以定义一个vue组件如下:

<template>
  <transition enter-active-class="zoomIn" leave-active-class="zoomOut">
      <div v-show="animateShow" class="animated" >{{messageText}}</div>
  </transition>
</template>
<style>
    .animated{
        font-size: 80px;
        color: #00d6b2;
        position: absolute;
        margin-left: 350px;
    }
</style>
<script type="text/babel">
  export default {
    data() {
      return {
         duration: 3000,
         startTime:10,
         animateShow:false,
         messageText:''
      };
    },
    methods: {
      close() {
        this.animateShow = false;
        setTimeout(() => {
          this.$el.parentNode.removeChild(this.$el);
        }, 2000);
      },

      startTimer() {
        if(this.startTime > 0){
          setTimeout(() => {
              this.animateShow = true;
          }, this.startTime);
        }
        if (this.duration > 0) {
          setTimeout(() => {
              this.close();
          }, this.duration);
        }
      }
    },

    mounted() {
      this.startTimer();
    }
  };
</script>
6、手动进行dom元素的挂载,相关代码如下:
import Vue from 'vue';
let aniMateConstructor = Vue.extend(require('./main.vue'));

let instance;
let instances = [];
let zIndex = 1000;

var Animation = function(options) {
  instance = new aniMateConstructor({
    data: options
  });
  instance.vm = instance.$mount();
  document.body.appendChild(instance.vm.$el);
  instance.vm.visible = true;
  instance.dom = instance.vm.$el;
  instance.dom.style.zIndex = zIndex++;
  instances.push(instance);
  return instance.vm;
};

export default Animation;

7、当需要该动画效果时,只需要手动挂载一次该dom结构,如下所示:

animationExample({
    animateShow: false,
    messageText:'你真棒!'
});

8、动画效果如以下gif图所示:


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

风逝老大

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

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

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

打赏作者

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

抵扣说明:

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

余额充值