Vue<幸运抽奖-砸金蛋>

qhXWS8fSsN.gif

在线演示地址

实现思路:

通过控制css动画的时间,来控制小锤子角度的变化,以及金蛋的消失,因此这里没有用到canvas等过多的js逻辑。

因为结果是确定的,所以在确定结果的情况下,无论砸哪个蛋都是返回这个结果,因此只需要确定用户每次点击金蛋的坐标,实现对应坐标位置金蛋敲击动画的变换,就能实现。

<template>
  <div>
    <div class="chouJiang one">
      <div class="egg" @click="clickOne(index)" v-for="(i,index) in chouJiang.num" :key="index">
        <!-- 锤子图片 -->
        <img
          class="chuizi"
          :class="{'qiao':chouJiang.qiao && chouJiang.egg == index}"
          src="@/assets/img/chuizi.png"
          alt
        />
        <!-- 鸡蛋图片 -->
        <img
          class="eg"
          :class="{'qiao':chouJiang.qiao && chouJiang.egg == index}"
          src="@/assets/img/egg.png"
          alt
        />
      </div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      chouJiang: {
        num: 3, //默认蛋数量
        egg: null, //敲击的哪个鸡蛋
        qiao: false, //是否敲击
        result: '谢谢参与', //默认结果
        time: 1000 //多少秒后弹出结果 ms
      }
    }
  },
  methods: {
    //敲击鸡蛋的方法
    clickOne(index) {
      //敲击过一次就不能再敲击
      if (!this.chouJiang.qiao) {
        this.chouJiang.egg = index
        this.chouJiang.qiao = true
        setTimeout(() => {
          alert(this.chouJiang.result)
        }, this.chouJiang.time)
      } else {
        alert('您已经敲过了哦~')
      }
    }
  }
}
</script>

<style lang="scss" scoped>
.chouJiang {
  margin: 50px 0;
}
/* 砸金蛋 */
.chouJiang.one {
  display: flex;
  justify-content: center;
  transform: scale(0.7);
  .egg {
    height: 150px;
    cursor: pointer;
    // overflow: hidden;
    margin: 0 20px;
    // border: 1px solid #ccc;
    position: relative;
    &:hover .chuizi {
      opacity: 1;
    }
    img {
      user-select: none;
      pointer-events: none;
    }
    .eg {
      height: 100%;
      transform: scale(1.3);
      &.qiao {
        animation: clickOne_eg 0.5s steps(1) 0.4s both 1;
      }
    }
    .chuizi {
      transform-origin: 100% 100%;
      opacity: 0;
      position: absolute;
      right: 0;
      top: 0;
      z-index: 9;
      &.qiao {
        animation: clickOne_chuizi 0.7s ease-in both 1;
      }
    }
  }
  /* 敲鸡蛋后的锤子动画 */
  @keyframes clickOne_chuizi {
    50% {
      transform: rotate(30deg);
    }
    99% {
      opacity: 1;
      transform: rotate(0);
    }
    100% {
      opacity: 0;
      transform: rotate(0);
    }
  }
  /* 敲鸡蛋后的鸡蛋动画 */
  @keyframes clickOne_eg {
    100% {
      opacity: 0;
    }
  }
}
</style>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容