本章节分享一段代码实例,它实现了数字抽奖效果。
代码实例如下:
<div class="start_draw">
<div class="wrap">
<div class="numw" v-for="(item,n) in numArrList" :key="n">
<ul :style="item">
<li v-for="(num,index) in numArr" :key="index">{{num}}</li>
</ul>
</div>
</div>
<div class="draw_btn_bar" v-if="drawBtnStatus === 0" @click="drawNow()">{{running === 0? '点击抽奖': '停'}}</div>
</div>
<script>
data() {
return {
running: 0, // 0,未执行 1:执行
numArrList: ['firstStyle','secondStyle','thirdStyle','fourStyle'],//抽奖码样式集合
numbers: [0,1,2,3,4,5,6,7,8,9],
numArr: [] //单个抽奖码数字数组
}
}
methods: {
//点击开始抽奖
drawNow(){
let _this = this;
let userName = this.globalData.userInfo.nickName;
let userIcon = this.globalData.userInfo.avatarUrl;
if(_this.running === 0)//未执行时
{
//无限循环数字滚动效果
_this.numArrList[0] = "-webkit-animation: circle1 2s linear infinite;";
_this.numArrList[1] = "-webkit-animation: circle2 2s linear infinite;";
_this.numArrList[2] = "-webkit-animation: circle3 2s linear infinite;";
_this.numArrList[3] = "-webkit-animation: circle4 2s linear infinite;";
_this.running++;
}else{
//取消转动效果
this.$fly.post(startDraw,{id: 1,name: userName,head: userIcon}).then(res => {
if(res.suc === 0) { //抽奖成功
var str = Math.round(Math.random() * 10000).toString();
if (str.length === 1) {
str = "000" + str;
}
if (str.length === 2) {
str = "00" + str;
}
if (str.length === 3) {
str = "0" + str;
}
console.log(str);
let luckstr = str;
let arr = luckstr.split("");
//let arr = String(res.data.num).split("");
_this.numArrList[0] = "animation: circle 3s ease-out;margin-top:" + (-196 * (Number(arr[0]))) + "rpx";
_this.numArrList[1] = "animation: circle 2s ease-out;margin-top:" + (-196 * (Number(arr[1]))) + "rpx";
_this.numArrList[2] = "animation: circle 1s ease-out;margin-top:" + (-196 * (Number(arr[2]))) + "rpx";
_this.numArrList[3] = "animation: circle 0s ease-out;margin-top:" + (-196 * (Number(arr[3]))) + "rpx";
_this.drawBtnStatus = 1;
} else if(res.suc === 1){ //活动参与人数已满
_this.numArrList[0] = "margin-top: 0";
_this.numArrList[1] = "margin-top: 0";
_this.numArrList[2] = "margin-top: 0";
_this.numArrList[3] = "margin-top: 0";
_this.drawBtnStatus = 1;
}
_this.running = 0;
}).catch(err => {
})
}
}
}
},
onReady(){
//初始抽奖数字数组
for(var i = 0;i<5;i++){
for(var j = 0;j<this.numbers.length;j++){
this.numArr.push(this.numbers[j]);
}
}
},
</script>
<style scoped>
.start_draw{
min-height: 520rpx;
padding: 30rpx 10rpx;
margin: 50rpx 60rpx;
border-radius: 10rpx;
background-image: -webkit-linear-gradient(top, #29D0A2, #2A90DA);
}
.wrap{
margin: 20rpx auto;
}
.numw{
width: 25%;
height: 196rpx;
line-height: 196rpx;
overflow: hidden;
color: #fff;
box-sizing: border-box;
display: inline-block;
transition: all 0.5s;
transition-delay: 2s;
}
.numw ul{
padding: 0 16rpx;
}
.numw li{
float: left;
width: 100%;
height: 196rpx;
line-height: 196rpx;
text-align: center;
background: #89D8E7;
font-size:100rpx;
}
.noBindText{
text-align: center;
}
@-webkit-keyframes circle {
0% {
transform: translateY(0);
}
100% {
transform: translateY(-980px);
}
}
@-webkit-keyframes circle1 {
0% {
transform: translateY(0);
}
100% {
transform: translateY(-980px);
}
}
@-webkit-keyframes circle2 {
0% {
transform: translateY(0);
}
100% {
transform: translateY(-1500px);
}
}
@-webkit-keyframes circle3 {
0% {
transform: translateY(0);
}
100% {
transform: translateY(-2000px);
}
}
@-webkit-keyframes circle4 {
0% {
transform: translateY(0);
}
100% {
transform: translateY(-2500px);
}
}
</style>
结语
上面代码实现了抽奖效果,实现原理其实非常简单,就是利用javascript操作css3相关属性。