zoukankan      html  css  js  c++  java
  • 九宫格封装好的组件 样式可以自由改哦

    二话不说贴代码 反正我写的很简单!!! 在子组件里

    <template>
      <div class="main_container box">
        <div class="turntable_box">
          <ul id="rotary_table">
            <li
              v-for="(item, index) in dataNum"
              :key="index"
              :class="['award' + index, { active: index == current }]"
              class="award"
            >
              <p>{{ item.name }}</p>
              <!-- <img :src="require(`@/assets/images/nineSquaredPaper/${item.name}.png`)" alt /> -->
              <div class="mask" v-if="index == current"></div>
            </li>
            <div id="start-btn" @click="start">抽奖 冲!!</div>
          </ul>
        </div>
      </div>
    </template>
    <script>
    export default {
      //  speed: 200,  时间->速度 
      props:{dataNum:Array,speed:Number,
      },
      data() {
        return {
          doSpeed:this.speed,
          current: 0, // 当前索引值
          // speed: 200, // 时间->速度
          diff: 10, // 基数
          award: {}, // 抽中的奖品
          time: 0, // 当前时间戳
          timer: null, // 定时器
        };
      },
      methods: {
        // 开始抽奖
        start() {

    this.doSpeed=this.speed;//再次点击速度重置
    // 开始抽奖
          this.getLottery()
          this.time = Date.now();
          // this.doSpeed = 200;
          this.diff = 12;
           
        },
      
        // 调接口获取奖品a
        getLottery() {
            let num=Math.round(Math.random()*(this.dataNum.length-1)+1);
          this.award.name =this.dataNum[num-1].name;
          this.award.id = num;
          console.log(this.award)
          this.move();
        },
        // 开始转动
        move() {
          this.timer = setTimeout(() => {
            this.current++;
            if (this.current > this.dataNum.length-1) {
              this.current = 0;
            }
            // 若抽中的奖品id存在,则开始减速转动
            if (this.award.id && (Date.now() - this.time) / 1000 > 2) {
              this.doSpeed += this.diff; // 转动减速
              // 若转动时间超过4秒,并且奖品id等于小格子的奖品id,则停下来
              if (
                (Date.now() - this.time) / 1000 > 4 &&
                this.award.id == this.dataNum[this.current].id
              ) {
                clearTimeout(this.timer);
                setTimeout(() => {
                    // 将中奖的产品传递回给父组件
                    this.$emit('fatherEvent',this.award)
                
                }, 0);
                return;
              }
            } else {
              // 若抽中的奖品不存在,则加速转动
              this.doSpeed -= this.diff;
            }
    
            this.move();
          }, this.doSpeed);
        },
      },
    };
    </script>
    <style scoped lang='scss'>
    .box {
      background-color: rgb(211, 163, 101);
       600px;
      height: 700px;
    }
    $white: #f4f4f4;
    .main_container {
       100%;
      min-height: 100%;
      //   background-color: #fb6010;
      background-size: 100% auto;
      background-repeat: no-repeat;
      font-size: 26px;
      // 作用: 禁用弹窗里的滑动影响页面滑动
      &.prohibit {
         100%;
        height: 100%;
        overflow: hidden;
      }
      // 设置占位符字体颜色
      input::-webkit-input-placeholder {
        color: #a4a5a6;
        font-size: 26px;
      }
      padding: 100px 0px;
      .turntable_box {
        margin: 0 auto;
        padding-top: 160px;
         90%;
        height: 850px;
        #rotary_table {
           621px;
          height: 621px;
          position: relative;
          margin: 20px auto;
          background-color: brown;
          .award {
             179px;
            height: 179px;
            text-align: center;
            float: left;
            position: absolute;
            overflow: hidden;
            p {
              height: 179px;
              line-height: 179px;
            }
            img {
              position: absolute;
               179px;
              top: 0;
              left: 0;
              height: 179px;
            }
            &.active {
              .mask {
                 179px;
                height: 179px;
                top: 0;
                position: absolute;
                border-radius: 10px;
                background-color: #fff0bd;
                opacity: 0.6;
              }
            }
    
            &.award0 {
              top: 21px;
              left: 21px;
            }
            &.award1 {
              top: 21px;
              left: 221px;
            }
            &.award2 {
              top: 21px;
              right: 21px;
            }
            &.award3 {
              top: 221px;
              right: 22px;
            }
            &.award4 {
              bottom: 22.5px;
              right: 22px;
            }
            &.award5 {
              bottom: 22.5px;
              right: 221px;
            }
            &.award6 {
              bottom: 22.5px;
              left: 21px;
            }
            &.award7 {
              top: 221px;
              left: 21px;
            }
          }
          #start-btn {
            position: absolute;
             179px;
            height: 179px;
            top: 221px;
            left: 221px;
            line-height: 179px;
            border-radius: 50%;
            text-align: center;
            color: white;
            background-color: rgb(182, 112, 7);
          }
        }
      }
    }
    </style>

    在父组件引入时

    <template>
        <div>
            <sudoku ref="child" :dataNum="dataNum" :speed='speed' @fatherEvent='fatherEvent' />
        </div>
    </template>
    <script>
    import sudoku from './sudoku.vue'
    export default {
        components:{
            sudoku,
            box
        },
        data(){
            return{
                 dataNum: [
            {
              name: "会员卡",
              id: 1,
            },
            {
              name: "水瓶",
              id: 2,
            },
            {
              name: "水杯",
              id: 3,
            },
            {
              name: "地铁",
              id: 4,
            },
            {
              name: "大树",
              id: 5,
            },
            {
              name: "轮椅",
              id: 6,
            },
            {
              name: "分支",
              id: 7,
            },
            {
              name: "流花",
              id: 8,
            },
          ],
          speed:200,
          award:''

            }
        },
        methods:{
            fatherEvent:function(data){
                window.alert('恭喜你获得了'+data.name)
                console.log('fatherEvent',data)
            }
        }
    }
    </script>
  • 相关阅读:
    模块:标准库Shelve
    模块:标准库shutil
    模块:标准库sys
    关于html中的文本节点问题
    MVVM
    iOS 检测有没有安装其它应用 和ios9下要注意的地方
    iOS9对SDK的影响(iOS9适配必看)
    CircleLayout
    MapSearch 阅读随笔
    苹果官网 demo The Elements 阅读随笔
  • 原文地址:https://www.cnblogs.com/huangla/p/15020585.html
Copyright © 2011-2022 走看看