vue使用 animate.css

1、安装

cnpm install animate.css --save

2、使用

2-1、新建animateCSS.js

const animateCSS = (element, animation, prefix = 'animate__') =>
  // We create a Promise and return it
  new Promise((resolve, reject) => {
    const animationName = `${prefix}${animation}`;
    const node = document.querySelector(element);

    node.classList.add(`${prefix}animated`, animationName);

    // When the animation ends, we clean the classes and resolve the Promise
    function handleAnimationEnd(event) {
      event.stopPropagation();
      node.classList.remove(`${prefix}animated`, animationName);
      resolve('Animation ended');
    }

    node.addEventListener('animationend', handleAnimationEnd, {once: true});
  });
  export default animateCSS;

2-2、动态添加动画

showItemDetail(item) {
      this.showOver = true;
      this.selectItem = item;
      animateCSS('.big_img', 'zoomIn').then((message) => {
        this.bigImg=false;//
        this.coverBox=true
        animateCSS('.cover_box', 'flipInY').then((message) => {
            
        });
      });
    },

3、多动画实例

<template>
  <div class="blessingTree wh100">
    <navBar
      title="祈福树"
      :leftArrowFlag="true"
      rightText="介绍"
      @clickNavBarRight="onClickRight"
    />
    <div class="content">
      <div class="content_main">
        <div class="bless_list">
          <div
            class="bless_item"
            v-for="(item, index) in blesss"
            :key="index"
            @click="showItemDetail(item)"
          >
            <img class="item_little_img" :src="item.little" alt="" />
          </div>
        </div>
      </div>
      <div class="content_bottom">
        <div class="bottom_btn my_bless" @click="goMyBless">
          <span>我的祈福</span>
        </div>
        <div class="bottom_btn go_bless" @click="goBless">
          <span>去祈福</span>
        </div>
      </div>
    </div>
    <van-overlay class="overlay" :show="show" @click="show = false">
      <div class="wrapper" @click.stop>
        <div class="box">
          <div class="box_title"><span>介绍</span></div>
          <div class="box_content">
            <h4>1.点击许愿牌可以看到大家的愿望</h4>
            <h4>2.点击左下角我的祈福可以查看自己的 祈福内容</h4>
            <h4>
              3.点击右下角去祈福,可以发布祈福内容
              发布内容不可修改,要认真对待每一次 祈福
            </h4>
          </div>
        </div>
        <van-icon @click="show = false" class="close_btn" name="close" />
      </div>
    </van-overlay>
    <van-overlay class="cover" :show="showOver" @click="showOver=false">
      <div class="wrapper" @click.stop>
        <div class="anmiate_box" v-show="showOver">
          <div class="big_img" v-show='bigImg'>
            <img class="bigImg" :src="selectItem.big" alt="" />
          </div>
          <div class="cover_box" v-show='coverBox' @click="closeCoverBox">
            <div
              class="cover_img_box"
              :style="{ 'background-image': 'url(' + selectItem.cover + ')' }"
            >
              <div class="cover_info">
                <p>{{ selectItem.des }}</p>
              </div>
              <div class="name_box">
                <div class="dot"></div>
                <span>{{ selectItem.name }}</span>
                <div class="dot"></div>
              </div>
            </div>
            <div class="collect_box" @click.stop="changeCollected">
              <van-icon v-if="selectItem.isCollected" name="like-o" />
              <van-icon v-else name="like" />
              <span>{{ selectItem.collectNums }}人祝福</span>
            </div>
          </div>
        </div>
      </div>
    </van-overlay>
    <!-- <div class="overlaybox" v-show="showOver" @click="showOver = false"></div> -->
  </div>
</template>

<script>
import animateCSS from "@/utils/animateCSS";
import navBar from "@/components/navBar";
export default {
  data() {
    return {
      show: false,
      showOver: false,
      bigImg: true,
      coverBox:false,
      selectItem: {},
      blesss: [
        {
          id: 1,
          little: require("../../../../assets/imgs/bless/aiqing.png"),
          cover: require("../../../../assets/imgs/bless/aiqingcover.png"),
          big: require("../../../../assets/imgs/bless/aiqing_.png"),
          des: "爱情啊,我爱了",
          collectNums: 7,
          isCollected: false,
          name: "罗杰",
          title: "爱情",
        },
        {
          id: 2,
          little: require("../../../../assets/imgs/bless/caiyun.png"),
          cover: require("../../../../assets/imgs/bless/caiyuncover.png"),
          big: require("../../../../assets/imgs/bless/caiyun_.png"),
          des: "希望工作一切顺利",
          collectNums: 5,
          isCollected: false,
          name: "李博儿",
          title: "财运",
        },
        {
          id: 3,
          little: require("../../../../assets/imgs/bless/jiankang.png"),
          cover: require("../../../../assets/imgs/bless/jiankangcover.png"),
          big: require("../../../../assets/imgs/bless/jiankang_.png"),
          des: "健康永久,安详快乐",
          collectNums: 3,
          isCollected: false,
          name: "我",
          title: "健康",
        },
        {
          id: 4,
          little: require("../../../../assets/imgs/bless/pingan.png"),
          cover: require("../../../../assets/imgs/bless/pingancover.png"),
          big: require("../../../../assets/imgs/bless/pingan_.png"),
          des:
            "㊗️愿天下的父母身体安康㊗️朋友们一切顺利㊗️孩子学业有成㊗️有情人终成眷属🙏🙏🙏",
          collectNums: 7,
          isCollected: false,
          name: "苏娜",
          title: "平安",
        },
        {
          id: 5,
          little: require("../../../../assets/imgs/bless/shiye.png"),
          cover: require("../../../../assets/imgs/bless/shiyecover.png"),
          big: require("../../../../assets/imgs/bless/shiye_.png"),
          des: "祝一家人平安快乐!",
          collectNums: 3,
          isCollected: false,
          name: "卡斯",
          title: "事业",
        },
        {
          id: 6,
          little: require("../../../../assets/imgs/bless/xueye.png"),
          cover: require("../../../../assets/imgs/bless/xueyecover.png"),
          big: require("../../../../assets/imgs/bless/xueye_.png"),
          des: "学业有成",
          collectNums: 7,
          isCollected: false,
          name: "路飞",
          title: "学业",
        },
      ],
    };
  },
  components: {
    navBar,
  },
  created() {},
  methods: {
    closeCoverBox(){
      this.coverBox=false;
      this.showOver=false;
      this.bigImg=true
    },
    changeCollected(){
      this.selectItem.isCollected=!this.selectItem.isCollected
    },
    showItemDetail(item) {
      this.showOver = true;
      this.selectItem = item;
      animateCSS('.big_img', 'zoomIn').then((message) => {
        this.bigImg=false;//
        this.coverBox=true
        animateCSS('.cover_box', 'flipInY').then((message) => {
            
        });
      });
    },
    onClickRight() {
      this.show = true;
    },
    goMyBless() {
      this.$router.push('/my/myBlessing')
    },
    goBless() {
      this.$router.push('/my/blessingCard')
    },
  },
};
</script>
<style lang="scss" scoped>
.blessingTree {
  display: flex;
  flex-direction: column;
  background-color: #eff2f7;
  background: url("../../../../assets/imgs/tree.png") no-repeat;
  background-size: 100% 100%;
  position: relative;
  .overlaybox {
    position: absolute;
    width: 100%;
    left: 0;
    top: 0;
    background: rgba(0, 0, 0, 0.4);
    height: 100%;
    z-index: 2;
  }
  .anmiate_box {
    position: absolute;
     width: 100%;
    // left: 0;
    // top: 0;
     height: 100%;
    display: flex;
    justify-content: center;
    align-items: center;
    z-index: 3;
    .big_img {
      width: 2.7rem;
      height: 3.7rem;
      position: absolute;
      img {
        width: 100%;
        height: 100%;
      }
    }
    .cover_box{
     width: 100%;
     height: 100%;
     padding-top: 1rem;
     .cover_img_box{
       width: 100%;
       height: 3.7rem;
       position: relative;
       background-size: auto 100%;
       background-repeat: no-repeat;
       background-position:80%;
       .cover_info{
         position: absolute;
         width: 1.85rem;
         height: 2.97rem;
         top:0.72rem;
         left:0.82rem;
         text-align: left;
         padding:0.1rem;
         text-align: justify;
         font-size: 14px;
         line-height: 0.2rem;
       }
       .name_box{
             position: absolute;
            bottom: 0.1rem;
            right: 1.2rem;
            font-size: 12px;
            padding: 0.05rem 0.1rem;
            color: #fff;
            display: flex;
            align-items: center;
            border-radius: 12px;
            background-color: #48c479;
            span{
              margin:0 0.03rem;
            }
            .dot{
              width: 0.04rem;
              height: 0.04rem;
              background: #fff;
              border-radius: 50%;
            }
       }
     }
     .collect_box{
       display:flex;
        font-size: 14px;
        box-sizing: border-box;
        background-color: #fff;
        padding: 0.1rem 0.2rem;
        position: absolute;
        bottom: 1.5rem;
        left: 50%;
        -webkit-transform: translateX(-60%);
        transform: translateX(-60%);
        border-radius: 155px;
        -webkit-box-align: center;
        -webkit-align-items: center;
        align-items: center;
        /deep/ .van-icon{
          color: crimson;
          font-size: 20px;
          margin-right: 0.07rem;
        }
      }
     }
    }

  .content {
    flex: 1;
    padding: 0.25rem 0.15rem;
    display: flex;
    flex-direction: column;
    .content_main {
      flex: 1;
      display: flex;
      flex-direction: column;
      justify-content: center;
      .bless_list {
        display: flex;
        flex-wrap: wrap;
        justify-content: space-around;
        .bless_item {
          width: 0.65rem;
          height: 1.07rem;
          margin: 0.3rem 0.15rem;
          img {
            width: 100%;
            height: 100%;
          }
        }
        .bless_item:nth-child(2n) {
          margin-top: 0.15rem;
        }
      }
    }
    .content_bottom {
      display: flex;
      align-items: center;
      justify-content: space-between;
      .bottom_btn {
        margin: 0 0.1rem;
        flex: 1;
        height: 0.44rem;
        display: flex;
        justify-content: center;
        align-items: center;
        font-size: 14px;
        color: #fff;
        border-radius: 0.08rem;
      }
      .my_bless {
        background-color: #efb835;
      }
      .go_bless {
        background-color: #07bf67;
      }
    }
  }
  .overlay {
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    text-align: center;
    .box {
      width: 3rem;
      .box_title {
        width: 100%;
        height: 0.5rem;
        background: $defaultColor;
        text-align: center;
        line-height: 0.5rem;
        color: #fff;
        font-size: 16px;
      }
      .box_content {
        width: 100%;
        height: 2rem;
        text-align: left;
        background: #fff;
        padding: 0.15rem 0.23rem 0;
        h4 {
          font-size: 14px;
          line-height: 0.25rem;
        }
      }
    }
    .close_btn {
      color: #fff;
      font-size: 40px;
      margin: 0.15rem auto 0;
    }
  }
  .cover {
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    text-align: center;
    .wrapper{
      width: 100%;
      height: 100%;
    }
  }
}
</style>

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值