首页 > 网络编程 > JavaScript > 正文

基于VUE实现的九宫格抽奖功能_vue.js

2018-10-12 16:09:31

先给大家展示下效果图:

HTML代码:

<template> <div class="luckDraw">  <title-bar :title="title"></title-bar>  <div class="container">   <div class="turntable-wrapper">    <div class="luck-wrapper">     <p class="integral">我的积分: <span>1000</span></p>     <ul class="nineGrid">      <li class="row">       <div v-for="(n, key) in 3" :key="n" :class="index === key ? `active` : ``">        <div class="wrapper">         <img src="../../assets/luck-icon.png" alt="">         <p>8金转</p>        </div>        <div class="mask"></div>       </div>      </li>      <li class="row">       <div :class="index === 7 ? 'active': ''">        <div class="wrapper">         <img src="../../assets/luck-icon.png" alt="">         <p>128金转</p>        </div>        <div class="mask"></div>       </div>       <div class="getLuck" @click="startLottery">        <p>立即<br>抽奖</p>       </div>        <div :class="index === 3 ? 'active': ''">        <div class="wrapper">         <img src="../../assets/luck-icon.png" alt="">         <p>128金转</p>        </div>        <div class="mask"></div>       </div>      </li>      <li class="row">       <div v-for="(n, key) in 3" :key="n" :class="index === 6-key ? `active` : ``">        <div class="wrapper">         <img src="../../assets/luck-icon.png" alt="">         <p>256金转</p>        </div>        <div class="mask"></div>       </div>      </li>     </ul>    </div>    <p class="share">分享领积分 <i class="icon-go"></i></p>    <div class="rule">     <p class="rule-title">活动规则</p>     <ul class="rule-main">      <li>1、活动时间:2017年9月8日起;</li>      <li>2、活动期间,股事汇用户每次抽奖消耗20积分,抽奖次数不限</li>      <li>3、金钻可用于向投顾提问、送礼、赞赏;</li>      <li>4、积分赚取:每日签到、分享文章/问答/直播间、点赞、金钻充值均可获得积分哦</li>      <li>5、活动最终解释权归股事汇所有。</li>     </ul>    </div>    <div></div>   </div>   <LuckToast :showToast="showToast" :toastType="toastType" @closeToast="closeToast" @startLottery="startLottery"></LuckToast>  </div> </div></template>

SCSS样式:

@import "~base";.luckDraw { .turntable-wrapper {  padding: 0 px3rem(38);  position: relative;  @include background-cover("background-luck.png");  padding-top: px3rem(121);  .luck-wrapper {   width: px3rem(300);   height: px3rem(377);   margin: 0 auto;   position: relative;   @include background-cover("background-turntable.png");   .integral {    width: 100%;    color: #6d2d00;    font-size: px3rem(16);    font-weight: normal;    text-align: center;    position: absolute;    top: px3rem(58);    span {     font-weight: 600;     color: #ff2f4d;    }   }   .nineGrid {    position: absolute;    top: px3rem(86);    left: 50%;    margin-left: px3rem(-130);    width: px3rem(260);    height: px3rem(260);    li {     height: px3rem(80);     display: flex;     margin-top: px3rem(5);     > div {      flex: 1;      margin-right: px3rem(5);      height: 100%;      text-align: center;      position: relative;      .wrapper {       width: 100%;       height: 100%;       margin: 0;       @include background-cover("background-grid.png");      }      img {       width: px3rem(46);       height: px3rem(38);       vertical-align: middle;       margin-top: px3rem(8);      }      .mask {       position: absolute;       top: 0;       left: 0;       width: 100%;       height: 100%;       opacity: 0.5;       border-radius: px3rem(10);       background-color: #000;       display: none;      }     }     > div.active {      .mask {       display: block;      }     }     > div:first-child {      margin-left: px3rem(5);     }     > div.getLuck {      @include background-cover("background-getLuck.png");      font-size: 0;      p {       font-size: px3rem(20);       font-weight: 600;       color: #fff;       line-height: 1.1;       margin-top: px3rem(11);      }     }    }    li:last-child {     margin-bottom: px3rem(5);    }   }  }  .share {   width: px3rem(160);   height: px3rem(42);   margin: 0 auto;   text-align: center;   line-height:px3rem(42);   @include background-cover("luckShrae.png");   margin-top: px3rem(22);   color: #6d2d00;   font-size: px3rem(16);   font-weight: 600;   .icon-go {    @include size(30);    @include background-cover("goShare-icon.png");    display: inline-block;    vertical-align: middle;    margin-bottom: px3rem(2);   }  }  .rule {   margin-top: px3rem(14);   color: #fff;   font-size: px3rem(14);   padding-bottom: px3rem(39);   .rule-title {    text-align: center;    position: relative;    font-size: px3rem(16);    margin-bottom: px3rem(14);   }   .rule-title:before,   .rule-title:after {    content: '';    position: absolute;    top: 52%;    background: #fff;    width: 30%;    height: px3rem(1);   }   .rule-title:before {    left: 0;   }   .rule-title:after {    right: 0;   }  } }}

JS代码:

// import Utils from 'utils'import TitleBar from 'components/TitleBar.vue'import LuckToast from 'components/luckToast.vue'export default { name: 'luckDraw', components: {  TitleBar,  LuckToast, }, data () {  return {   title: '积分转盘',   index: -1,  // 当前转动到哪个位置,起点位置   count: 8,  // 总共有多少个位置   timer: 0,  // 每次转动定时器   speed: 200,  // 初始转动速度   times: 0,  // 转动次数   cycle: 50,  // 转动基本次数:即至少需要转动多少次再进入抽奖环节   prize: -1,  // 中奖位置   click: true,   showToast: false,   toastType: 'luck',  } }, props: { }, methods: {  // 开始抽奖  startLottery () {   if (!this.click) {    return   }   this.closeToast()   this.speed = 200   this.click = false   this.startRoll()  },  // 开始转动  startRoll () {   this.times += 1 // 转动次数   this.oneRoll() // 转动过程调用的每一次转动方法,这里是第一次调用初始化   // 如果当前转动次数达到要求 && 目前转到的位置是中奖位置   if (this.times > this.cycle + 10 && this.prize === this.index) {    clearTimeout(this.timer)  // 清除转动定时器,停止转动    this.prize = -1    this.times = 0    this.click = true    this.showToast = true    this.toastType = 'comeOn'    console.log('你已经中奖了')   } else {    if (this.times < this.cycle) {     this.speed -= 10  // 加快转动速度    } else if (this.times === this.cycle) {  // 随机获得一个中奖位置     const index = parseInt(Math.random() * 10, 0) || 0     this.prize = index     if (this.prize > 7) {      this.prize = 7     }     console.log(`中奖位置${this.prize}`)    } else if (this.times > this.cycle + 10 &&     ((this.prize === 0 && this.index === 7) || this.prize === this.index + 1)) {     this.speed += 110    } else {     this.speed += 20    }    if (this.speed < 40) {     this.speed = 40    }    this.timer = setTimeout(this.startRoll, this.speed)   }  },  // 每一次转动  oneRoll () {   let index = this.index // 当前转动到哪个位置   const count = this.count // 总共有多少个位置   index += 1   if (index > count - 1) {    index = 0   }   this.index = index  },  // 关闭弹出框  closeToast () {   this.showToast = false  }, }, beforeMount () { }, created () { }, beforeDestroy () { },}

总结

以上所述是小编给大家介绍的基于VUE实现的九宫格抽奖功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

  • 相关标签:JavaScript
  • 本文发布HTML5中文学习网 ,转载请注明出处,感谢您!
  • 相关文章


  • 曝网友假装外国人写投诉信 ofo秒退押金并回函致歉
  • 苹果市值缩水逾2000亿美元 遭多家投行下调目标价
  • Asp.net Core与类库读取配置文件信息的方法_实用技巧
  • asp.net在Repeater嵌套的Repeater中使用复选框详解_实用技巧
  • 利用IIS调试ASP.NET网站程序的完整步骤_实用技巧
  • Asp.Net Core轻松学习系列之配置文件_实用技巧
  • ASP.NET 页生命周期概述(小结)_实用技巧
  • 详解ASP.NET Core WebApi 返回统一格式参数_实用技巧
  • 2018年网络流行语有哪些?2018年十大网络流行语盘点
  • 华为首席财务官孟晚舟被暂扣 深圳市政府要求加方立即放人!
  • 独孤九贱(4)_PHP视频教程

    江湖传言:PHP是世界上最好的编程语言。真的是这样吗?这个梗究竟是从哪来的?学会本课程,你就会明白了。 PHP中文网出品的PHP入门系统教学视频,完全从初学者的角度出发,绝不玩虚的,一切以实用、有用...

    独孤九贱(5)_ThinkPHP5视频教程

    ThinkPHP是国内最流行的中文PHP开发框架,也是您Web项目的最佳选择。《php.cn独孤九贱(5)-ThinkPHP5视频教程》课程以ThinkPHP5最新版本为例,从最基本的框架常识开始,将...

    独孤九贱(1)_HTML5视频教程

    《php.cn原创html5视频教程》课程特色:php中文网原创幽默段子系列课程,以恶搞,段子为主题风格的php视频教程!轻松的教学风格,简短的教学模式,让同学们在不知不觉中,学会了HTML知识。 ...

    ThinkPHP5实战之[教学管理系统]

    本套教程,以一个真实的学校教学管理系统为案例,手把手教会您如何在一张白纸上,从零开始,一步一步的用ThinkPHP5框架快速开发出一个商业项目。

    PHP入门视频教程之一周学会PHP

    所有计算机语言的学习都要从基础开始,《PHP入门视频教程之一周学会PHP》不仅是PHP的基础部分更主要的是PHP语言的核心技术,是学习PHP必须掌握的内容,任何PHP项目的实现都离不开这部分的内容,通...

    作者信息

    kevin

    永远在学习的路上!

    相关教程

  • javascript初级视频教程 javascript初级视频教程
  • jquery 基础视频教程 jquery 基础视频教程
  • javascript三级联动视频教程 javascript三级联动视频教程
  • 独孤九贱(3)_JavaScript视频教程 独孤九贱(3)_JavaScript视频教程
  • 独孤九贱(6)_jQuery视频教程 独孤九贱(6)_jQuery视频教程
  • 热门教程