<!-- 抽奖动画 -->
|
|
<template>
|
|
<view v-if="show" class="luckyAnimation">
|
|
<div class="loader"></div>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
export default {
|
|
data() {
|
|
return {
|
|
num : 1,
|
|
show : false
|
|
}
|
|
},
|
|
destroyed() {
|
|
if (this.interval) {
|
|
clearInterval(this.interval);
|
|
}
|
|
},
|
|
methods: {
|
|
start() {
|
|
this.show = true;
|
|
this.num = 1;
|
|
this.interval = setInterval(() => {
|
|
if (this.num <= 0) {
|
|
this.show = false
|
|
this.$emit('close')
|
|
clearInterval(this.interval);
|
|
}
|
|
this.num--;
|
|
}, 500)
|
|
},
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
.luckyAnimation {
|
|
position: fixed;
|
|
left: 0;
|
|
top: 0;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
height: 100vh;
|
|
width: 100%;
|
|
z-index: 200;
|
|
|
|
.loader {
|
|
height: 15px;
|
|
aspect-ratio: 4;
|
|
--_g: no-repeat radial-gradient(farthest-side, #000, 90%, #0000);
|
|
background:
|
|
var(--_g) left,
|
|
var(--_g) right;
|
|
background-size: 25% 100%;
|
|
display: grid;
|
|
}
|
|
|
|
.loader:before,
|
|
.loader:after {
|
|
content: "";
|
|
height: inherit;
|
|
aspect-ratio: 1;
|
|
grid-area: 1/1;
|
|
margin: auto;
|
|
border-radius: 50%;
|
|
transform-origin: -100% 50%;
|
|
background: #fff;
|
|
animation: l49 1s infinite linear;
|
|
}
|
|
|
|
.loader:after {
|
|
transform-origin: 200% 50%;
|
|
--s: -1;
|
|
animation-delay: -.5s;
|
|
}
|
|
|
|
@keyframes l49 {
|
|
|
|
58%,
|
|
100% {
|
|
transform: rotate(calc(var(--s, 1)*1turn))
|
|
}
|
|
}
|
|
}
|
|
</style>
|