一、前言
- 九宫格布局
- 注释了三种结果分支
- 懒得找图,背景色将就看一下
- 不足的地方,欢迎评论指正
二、代码注释详解
<template>
<div class="box">
<div class="raffleBox">
<div :class="{ raffleTrem: true, active: data.classFlag == 1 }">富强</div>
<div :class="{ raffleTrem: true, active: data.classFlag == 2 }">民主</div>
<div :class="{ raffleTrem: true, active: data.classFlag == 3 }">文明</div>
<div :class="{ raffleTrem: true, mt: true, active: data.classFlag == 8 }">法治</div>
<button class="raffleStart mt" @click="raffleStart" :disabled="data.disabledFlag">{{ !data.raffleFlag ? '开始' :
'结束'
}}</button>
<div :class="{ raffleTrem: true, mt: true, active: data.classFlag == 4 }">和谐</div>
<div :class="{ raffleTrem: true, mt: true, active: data.classFlag == 7 }">公正</div>
<div :class="{ raffleTrem: true, mt: true, active: data.classFlag == 6 }">平等</div>
<div :class="{ raffleTrem: true, mt: true, active: data.classFlag == 5 }">自由</div>
</div>
</div>
</template>
<script setup>
import { ref, reactive } from 'vue';
const data = reactive({
classFlag: 0,
raffleFlag: false,
setIntervalFlag: null,
disabledFlag: false,
setIntervalNum: 1,
list: ['富强', '民主', '文明', '和谐', '自由', '平等', '公正', '法治']
})
const getRandom = (min, max) => {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
const fn = (num) => {
data.setIntervalFlag = setInterval(() => {
if (data.classFlag >= 8) {
data.classFlag = 0
data.classFlag++
} else {
data.classFlag++
}
}, num)
}
const raffleStart = () => {
data.raffleFlag = !data.raffleFlag
if (data.raffleFlag == true) {
data.disabledFlag = true
setTimeout(() => {
data.disabledFlag = false
}, 500)
fn(100)
} else {
data.disabledFlag = true
let setIntervalA
setIntervalA = setInterval(() => {
if (data.setIntervalNum >= 6) {
clearInterval(data.setIntervalFlag)
data.setIntervalFlag = null
clearInterval(setIntervalA)
setIntervalA = null
data.disabledFlag = false
data.classFlag = 0
let confirmFlag = confirm("谢谢参与!请再接再励!");
return window.location.href = "https://juejin.cn/post/7306356286428594176"
}
data.setIntervalNum++
clearInterval(data.setIntervalFlag)
data.setIntervalFlag = null
fn(data.setIntervalNum * 100)
}, 1500)
}
}
</script>
<style scoped lang="scss">
.box .raffleBox .active {
border-color: red;
}
.mt {
margin-top: 5px;
}
.raffleBox {
width: 315px;
margin: auto;
display: flex;
flex-wrap: wrap;
justify-content: space-between;
text-align: center;
box-sizing: border-box;
.raffleTrem,
.raffleStart {
width: 100px;
height: 100px;
line-height: 100px;
background: #ccc;
box-sizing: border-box;
border: 1px solid rgba(0, 0, 0, 0);
}
.raffleStart {
background-color: aquamarine;
}
}
</style>