【调试步骤】
# 安装依赖 
npm install
# 开启本地服务器localhost:8088
npm run dev
# 发布环境
npm run build
#然后静待你的浏览器打开一个网页,按F12 进入手机模拟器,查看效果最佳(推荐chrome浏览器,前端开发者的必备)

<template>  <div class="container">    <div class="lucky-wheel">      <div class="lucky-title"></div>      <div class="wheel-main">        <div class="wheel-pointer-box">           <div class="wheel-pointer" @click="rotate_handle()" :style="{transform:rotate_angle_pointer,transition:rotate_transition_pointer}"></div>        </div> <div class="wheel-bg" :style="{transform:rotate_angle,transition:rotate_transition}">     <div class="prize-list">            <div class="prize-item" v-for="(item,index) in prize_list" :key="index">              <div class="prize-pic"> <img :src="item.icon">              </div>              <div class="prize-count" v-if="item.count"> {{item.count}}              </div>              <div class="prize-type"> {{item.name}}              </div>            </div>          </div>        </div>      </div>    </div>    <div class="main">      <div class="main-bg"></div>      <div class="bg-p"></div>      <div class="content">        <div class="lottery_ticket">今日免费抽奖次数: {{ lottery_ticket}}</div>      </div>      <div class="tip">        <div class="tip-title">活动规则</div>        <div class="tip-content">          <p> 1.每日签到后,即可获得一次幸运大转盘的机会,仅限当天有效,过期作废。 2.金币抽奖,每10个金豆可兑换一次大转盘机会。</p>          <p> 2.金币抽奖,每10个金豆可以兑换一次大转盘抽奖机会</p>          <p> 3.所中金豆或积分到【我的账户】中查询。累计达到100金豆及以上,可以兑换相应奖品</p>        </div>      </div>    </div>    <div class="toast" v-show="toast_control">      <div class="toast-container">        <img :src="toast_pictrue" class="toast-picture">        <div class="close" @click="close_toast()"></div>        <div class="toast-title">          {{toast_title}}        </div>        <div class="toast-btn">          <div class="toast-cancel" @click="close_toast">关闭</div>        </div>      </div>    </div>    <div class="toast-mask" v-show="toast_control"></div>  </div></template><script>export default { data() {  return {   easejoy_bean: 0, //金豆   lottery_ticket: 0, //抽奖次数   prize_list: [    {     icon: require("../assets/img/bean_500.png"), // 奖品图片     count: 10, // 奖品数量     name: "易趣豆", // 奖品名称     isPrize: 1 // 该奖项是否为奖品    },    {     icon: require("../assets/img/bean_five.png"),     count: 5,     name: "豆",     isPrize: 1    },    {     icon: require("../assets/img/bean_one.png"),     count: 10,     name: "易趣豆",     isPrize: 1    },    {     icon: require("../assets/img/point_five.png"),     count: 5,     name: "积分",     isPrize: 1    },    {     icon: require("../assets/img/point_ten.png"),     count: 10,     name: "积分",     isPrize: 1    },    {     icon: require("../assets/img/bean_500.png"),     count: 10,     name: "易趣豆",     isPrize: 1    },    {     icon: require("../assets/img/give_up.png"),     count: 0,     name: "未中奖",     isPrize: 0    },    {     icon: require("../assets/img/bean_500.png"),     count: 10,     name: "易趣豆",     isPrize: 1    }   ], //奖品列表   toast_control: false, //抽奖结果弹出框控制器   hasPrize: false, //是否中奖   start_rotating_degree: 0, //初始旋转角度   rotate_angle: 0, //将要旋转的角度   start_rotating_degree_pointer: 0, //指针初始旋转角度   rotate_angle_pointer: 0, //指针将要旋转的度数   rotate_transition: "transform 6s ease-in-out", //初始化选中的过度属性控制   rotate_transition_pointer: "transform 12s ease-in-out", //初始化指针过度属性控制   click_flag: true, //是否可以旋转抽奖   index: 0   }; }, created() {  this.init_prize_list(); }, computed: {  toast_title() {   return this.hasPrize    ? "恭喜您,获得" this.prize_list[this.index].count  ' '  this.prize_list[this.index].name    : "未中奖";  },  toast_pictrue() {   return this.hasPrize    ? require("../assets/img/congratulation.png")    : require("../assets/img/sorry.png");  } }, methods: {  //此方法为处理奖品数据  init_prize_list(list) {},  rotate_handle() {   this.index = 1 //指定每次旋转到的奖品下标   this.rotating();  },  rotating() {   if (!this.click_flag) return;   var type = 0; // 默认为 0 转盘转动 1 箭头和转盘都转动(暂且遗留)   var during_time = 5; // 默认为1s   var random = Math.floor(Math.random() * 7);   var result_index = this.index ; // 最终要旋转到哪一块,对应prize_list的下标   var result_angle = [337.5, 292.5, 247.5, 202.5, 157.5, 112.5, 67.5, 22.5]; //最终会旋转到下标的位置所需要的度数   var rand_circle = 6; // 附加多转几圈,2-3   this.click_flag = false; // 旋转结束前,不允许再次触发   if (type == 0) {    // 转动盘子    var rotate_angle =     this.start_rotating_degree      rand_circle * 360      result_angle[result_index] -     this.start_rotating_degree % 360;    this.start_rotating_degree = rotate_angle;    this.rotate_angle = "rotate("  rotate_angle  "deg)";    // // //转动指针    // this.rotate_angle_pointer = "rotate(" this.start_rotating_degree_pointer  360*rand_circle "deg)";    // this.start_rotating_degree_pointer =360*rand_circle;    var that = this;    // 旋转结束后,允许再次触发    setTimeout(function() {     that.click_flag = true;     that.game_over();    }, during_time * 1000  1500); // 延时,保证转盘转完   } else {    //   }  },  game_over() {   this.toast_control = true;   this.hasPrize = this.prize_list[this.index].isPrize  },  //关闭弹窗  close_toast() {   this.toast_control = false;  } }};</script><style scoped>.container { width: 100%;}.lucky-wheel { width: 100%; height: 31.5625rem; background: rgb(252, 207, 133) url("../assets/img/color_pillar.png") no-repeat  center bottom; background-size: 100%; padding-top: 1.5625rem;}.lucky-title { width: 100%; height: 8.125rem; background: url("../assets/img/lucky_title.png") no-repeat center top; background-size: 100%;}.wheel-main { display: flex; align-items: center; justify-content: center; position: relative;}.wheel-bg { width: 18.4375rem; height: 18.4375rem; background: url("../assets/img/draw_wheel.png") no-repeat center top; background-size: 100%; color: #fff; font-weight: 500; display: flex; flex-direction: column; justify-content: center; align-content: center; transition: transform 3s ease;}.wheel-pointer-box { position: absolute; top: 50%; left: 50%; z-index: 100; transform: translate(-50%, -60%); width: 5.3125rem; height: 5.3125rem;}.wheel-pointer { width: 5.3125rem; height: 5.3125rem; background: url("../assets/img/draw_btn.png") no-repeat center top; background-size: 100%; transform-origin: center 60%;}.wheel-bg div { text-align: center;}.prize-list { width: 100%; height: 100%; position: relative;}.prize-list .prize-item { position: absolute; top: 0; left: 0; z-index: 2;}.prize-list .prize-item:first-child { top: 0; left: 8.3125rem; transform: rotate(20deg);}.prize-list .prize-item:nth-child(2) { top: 2.8rem; left: 10.8rem; transform: rotate(67deg);}.prize-list .prize-item:nth-child(3) { top: 6.4rem; left: 10.6rem; transform: rotate(-250deg);}.prize-list .prize-item:nth-child(4) { top: 9rem; left: 8.2125rem; transform: rotate(-210deg);}.prize-list .prize-item:nth-child(5) { top: 9.2125rem; left: 4.4rem; transform: rotate(-160deg);}.prize-list .prize-item:nth-child(6) { top: 6.3875rem; left: 1.9rem; transform: rotate(-111deg);}.prize-list .prize-item:nth-child(7) { top: 2.8rem; left: 1.8125rem; transform: rotate(-69deg);}.prize-list .prize-item:nth-child(8) { top: 0; left: 4.5rem; transform: rotate(-20deg);}.prize-item { width: 5.875rem; height: 9rem;}.prize-pic img { width: 4.0625rem; height: 2.5rem; margin-top: 1.5625rem;}.prize-count { font-size: 0.875rem;}.prize-type { font-size: 0.75rem;}.main { position: relative; width: 100%; min-height: 14.25rem; background: rgb(243, 109, 86); padding-bottom: 1.6875rem;}.main-bg { width: 100%; height: 6.5625rem; position: absolute; top: -3.4375rem; left: 0; background: url("../assets/img/luck_bg.png") no-repeat center top; background-size: 100%;}.bg-p { width: 100%; height: 2.95rem; background: rgb(252, 207, 133);}.content { position: absolute; top: 0.175rem; left: 0; background: rgb(243, 109, 86); width: 100%; height: 5.1875rem; font-size: 1.125rem; color: #ffeb39; padding-left: 6.75rem;}.content div { text-align: left;}.tip { position: relative; margin: 2.5rem auto 0; width: 17.5rem; border: 1px solid #fbc27f;}.tip-title { position: absolute; top: -1rem; left: 50%; transform: translate(-50%, 0); font-size: 1rem; color: #fccc6e; background: rgb(243, 109, 86); padding: 0.3125rem 0.625rem;}.tip-content { padding: 1.5625rem 0.625rem; font-size: 0.875rem; color: #fff8c5; line-height: 1.5;}.toast-mask { position: fixed; top: 0; left: 0; background: rgba(0, 0, 0, 0.6); z-index: 10000; width: 100%; height: 100%;}.toast { position: fixed; top: 50%; left: 50%; z-index: 20000; transform: translate(-50%, -50%); width: 15.4375rem; background: #fff; border-radius: 0.3125rem; padding: 0.3125rem; background-color: rgb(252, 244, 224);}.toast-container { position: relative; width: 100%; height: 100%; border: 1px dotted #fccc6e;}.toast-picture { position: absolute; top: -6.5rem; left: -1.5rem; width: 18.75rem; height: 8.5625rem;}.toast-pictrue-change { position: absolute; top: -1.5rem; left: -1.375rem; width: 17.5rem; height: 3.125rem;}.toast-title { padding: 2.8125rem 0; font-size: 18px; color: #fc7939; text-align: center;}.toast-btn { display: flex; align-items: center; justify-content: center; margin-bottom: 0.9375rem;}.toast-btn div { background-image: -moz-linear-gradient(  -18deg,  rgb(242, 148, 85) 0%,  rgb(252, 124, 88) 51%,  rgb(252, 124, 88) 99% ); background-image: -ms-linear-gradient(  -18deg,  rgb(242, 148, 85) 0%,  rgb(252, 124, 88) 51%,  rgb(252, 124, 88) 99% ); background-image: -webkit-linear-gradient(  -18deg,  rgb(242, 148, 85) 0%,  rgb(252, 124, 88) 51%,  rgb(252, 124, 88) 99% ); box-shadow: 0px 4px 0px 0px rgba(174, 34, 5, 0.7); width: 4.6875rem; height: 1.875rem; border-radius: 1.875rem; text-align: center; line-height: 1.875rem; color: #fff;}.close { position: absolute; top: -0.9375rem; right: -0.9375rem; width: 2rem; height: 2rem; background: url("../assets/img/close_store.png") no-repeat center top; background-size: 100%;}</style>

 
  
					
				
评论