只用一个背景图片实现九宫格抽奖(uniapp纯代码)

简介: 只用一个背景图片实现九宫格抽奖(uniapp纯代码)
<template>
    <view class="content">
        <view class="bar">
            <view class="line">
                <p :class="num == 0 ? 'block':'none'">
                    <view class="" v-if="type">
                        <image :src="url+data[0].img" mode=""></image>
                        <text>{{data[0].name}}</text>
                    </view>
                </p>
                <p :class="num == 1 ? 'block':'none'">
                    <view class="" v-if="type">
                        <image :src="url+data[1].img" mode=""></image>
                        <text>{{data[1].name}}</text>
                    </view>
                </p>
                <p :class="num == 2 ? 'block':'none'">
                    <view class="" v-if="type">
                        <image :src="url+data[2].img" mode=""></image>
                        <text>{{data[2].name}}</text>
                    </view>
                </p>
            </view>
            <view class="line">
                <p :class="num == 3 ? 'block':'none'">
                    <view class="" v-if="type">
                        <image :src="url+data[3].img" mode=""></image>
                        <text>{{data[3].name}}</text>
                    </view>
                </p>
                <p class="none" @click="click"></p>
                <p :class="num == 4 ? 'block':'none'">
                    <view class="" v-if="type">
                        <image :src="url+data[4].img" mode=""></image>
                        <text>{{data[4].name}}</text>
                    </view>
                </p>
            </view>
            <view class="line">
                <p :class="num == 5 ? 'block':'none'">
                    <view class="" v-if="type">
                        <image :src="url+data[5].img" mode=""></image>
                        <text>{{data[5].name}}</text>
                    </view>
                </p>
                <p :class="num == 6 ? 'block':'none'">
                    <view class="" v-if="type">
                        <image :src="url+data[6].img" mode=""></image>
                        <text>{{data[6].name}}</text>
                    </view>
                </p>
                <p :class="num == 7 ? 'block':'none'">
                    <view class="" v-if="type">
                        <image :src="url+data[7].img" mode=""></image>
                        <text>{{data[7].name}}</text>
                    </view>
                </p>
            </view>
        </view>
        <p @click="start" class="start"></p>
        <p @click="close" class="close"></p>
        <p class="zhong"> <text @click="show">查看攻略</text> <text>可抽奖次数:{{nums}}</text> <text @click="target('/success/myactive')">我的中奖记录</text></p>
        <image class="right" :src="url+'/uploads/20231115/bd89c46e0da9b7a025023fd31d51cfbe.png'" mode=""></image>
        <p class="reco"> <text style="width: 10%;">序号</text> <text style="width: 30%;">昵称</text> <text
                style="width: 30%;">奖品</text><text style="width: 30%;">时间</text></p>
        <view class="prize">
            <p class="list" v-for="(item,index) in winning_data" :key="index"> <text
                    style="width: 10%;">{{item.id}}</text> <text style="width: 30%;">{{item.nickname}}</text> <text
                    style="width: 30%;">{{item.name}}</text><text style="width: 30%;">{{item.create_time}}</text></p>
        </view>
    </view>
</template>
<script>
    import {
        active_list,
        winning,
        winning_add
    } from '@/api/api.js';
    import color from '../uni_modules/uview-ui/libs/config/color';
    export default {
        data() {
            return {
                data: [], //图片数据
                url: getApp().globalData.url, //全局数据
                list: [0, 1, 2, 4, 7, 6, 5, 3],
                num: 8,
                status: false,
                int: '',
                number: 0,
                type: true,
                datas: [], //概率数组
                close_status: false,
                randomNum: 0,
                nums: 1,
                winning_data: [],
                scenic_data:[]
            }
        },
        onLoad(options) {
            this.scenic_data = JSON.parse(options.data)
            this.active_list();
            this.winning()
        },
        methods: {
            target(url){
                uni.navigateTo({
                    url:url
                })
            },
            show() {
                uni.showModal({
                    title: this.data[0]['active'].name,
                    content: this.data[0]['active'].content,
                    success(res) {
                    }
                })
            },
            async winning() {
                const res = await winning()
                this.winning_data = res.data
            },
            // 打乱数组
            randomSortArrays(arr) {
                var stack = [];
                while (arr.length) {
                    //Math.random():返回 [0,1) 之间的一个随机数
                    var index = parseInt(Math.random() * arr.length); // 利用数组长度生成随机索引值
                    stack.push(arr[index]); // 将随机索引对应的数组元素添加到新的数组中
                    arr.splice(index, 1); // 删除原数组中随机生成的元素
                }
                if (this.datas[this.randomNum].name == stack[this.num].name) {
                    uni.showToast({
                        title: '恭喜你抽中' + stack[this.num].name + '!',
                        icon: 'none'
                    })
                    return this.data = stack
                }
                this.randomSortArrays(stack)
            },
            click() {
                    // this.status = false
                    // this.close_status = false
                    // this.type = true
                    // clearInterval(this.int)
                    // this.randomNum = Math.floor(Math.random() * 100) + 1;
                    // this.randomSortArrays(this.data)
                            uni.showToast({
                    title: '点击下方蓝色按钮开始抽奖,红色按钮停止抽奖',
                    icon: 'none'
                })
            },
            start() {
                if (this.nums == 0) {
                    uni.showToast({
                        title: '没有次数了,请点击查看攻略获取次数',
                        icon: 'none'
                    })
                    return
                }
                if (!this.status) {
                    this.nums = this.nums - 1
                    this.status = true
                    this.type = false
                    if (this.num == 8) this.num = 0
                    this.int = setInterval(() => {
                        if (this.status == true) {
                            this.number += 1
                            if (this.number == 8) this.number = 0
                            this.num = this.list[this.number]
                        }
                    }, 500)
                    setTimeout(() => {
                        this.close_status = true
                    }, 4000)
                } else {
                    uni.showToast({
                        title: '手速太快了',
                        icon: 'none'
                    })
                }
            },
            close() {
                if (this.status && this.close_status) {
                    this.status = false
                    this.close_status = false
                    this.type = true
                    clearInterval(this.int)
                    this.randomNum = Math.floor(Math.random() * 100) + 1;
                    this.randomSortArrays(this.data)
                    this.winning_add()
                } else {
                    uni.showToast({
                        title: '至少转一圈',
                        icon: 'none'
                    })
                }
            },
            async winning_add(){
                const res = await winning_add({
                    user_id:JSON.parse(uni.getStorageSync('user')).id,
                    scenic_id:this.scenic_data.id,
                    active_id:this.datas[0]['active']['id'],
                    name:this.data[this.num].name,
                    status:2
                })
                this.winning()
            },
            async active_list() {
                try {
                    const res = await active_list({
                        scenic_id: this.scenic_data.id
                    });
                    for (let i in res.data) {
                        for (let s = 0; s < res.data[i].num; s++) {
                            this.datas.push(res.data[i])
                        }
                    }
                    this.data = res.data
                    console.log(this.data,111);
                } catch (err) {
                    console.log(err);
                }
            },
        }
    }
</script>
<style>
    .prize {
        width: 90%;
        margin-left: 5%;
        height: 450rpx;
        overflow: hidden;
        overflow-y: scroll;
        font-size: 13px;
    }
    .reco {
        width: 80%;
        margin-left: 5%;
        display: flex;
        justify-content: space-evenly;
        padding: 10px 15px;
        margin-top: 80rpx;
        font-size: 12px;
    }
    .reco text {
        display: block;
        text-align: center;
    }
    .list text {
        display: block;
        text-align: center;
    }
    .list {
        width: 90%;
        display: flex;
        justify-content: space-evenly;
        padding: 10px 15px;
    }
    .right {
        width: 80rpx;
        height: 80rpx;
        position: absolute;
        top: 1235rpx;
        right: 0px;
        z-index: 999;
    }
    .content {
        width: 100%;
        height: 2000rpx;
        background-image: url('https://wwz.jingyi.icu/uploads/20231114/a5a1a2f6f9d999445c5ad4f760b23267.png');
        background-repeat: no-repeat;
        background-size: 100% 2000rpx;
        padding: 0;
        margin: 0;
    }
    .bar {
        display: flex;
        justify-content: center;
        flex-wrap: wrap;
        padding-top: 548rpx;
        /* display: none; */
    }
    .line {
        width: 76.3%;
        display: flex;
        justify-content: space-evenly;
        align-items: center;
        align-content: center;
        margin-top: 10rpx;
    }
    .line image {
        width: 80rpx;
        height: 80rpx;
    }
    .none {
        width: 32%;
        height: 190rpx;
        border-radius: 20rpx;
        background-color: rgba(255, 255, 127, 0);
    }
    .block {
        width: 32%;
        height: 190rpx;
        border-radius: 20rpx;
        background-color: rgba(255, 255, 127, 1);
    }
    .none view {
        width: 100%;
        height: 100%;
        display: flex;
        flex-wrap: wrap;
        align-items: center;
        justify-content: center;
        transition: all 2s;
    }
    .none text {
        width: 100%;
        display: inline;
        text-align: center;
        margin-top: -50rpx;
        font-size: 13px;
        transition: all 2s;
    }
    .block view {
        width: 100%;
        height: 100%;
        display: flex;
        flex-wrap: wrap;
        align-items: center;
        justify-content: center;
        transition: all 2s;
    }
    .block text {
        width: 100%;
        display: inline;
        text-align: center;
        margin-top: -50rpx;
        font-size: 13px;
        transition: all 2s;
    }
    .start {
        position: absolute;
        top: 78vh;
        width: 80rpx;
        height: 60rpx;
        background-color: aqua;
        left: 54%;
        background-color: rgba(255, 255, 127, 0);
    }
    .close {
        position: absolute;
        top: 78vh;
        width: 80rpx;
        height: 60rpx;
        background-color: aqua;
        left: 36%;
        background-color: rgba(255, 255, 127, 0);
    }
    .zhong {
        width: 85%;
        margin-left: 5%;
        display: flex;
        justify-content: space-between;
        margin-top: 115rpx;
        font-size: 15px;
    }
    .zhong text {
        display: flex;
    }
</style>
相关文章
|
1月前
好看的粒子特效代码
好看的粒子特效代码,鼠标可以拖住旋转或者放大,喜欢的话可以拿去使用
33 2
|
4月前
|
移动开发 前端开发 JavaScript
HTML+CSS动画打造酷炫轮播图!(含源码)
HTML+CSS动画打造酷炫轮播图!(含源码)
|
4月前
|
C# UED 开发者
WPF动画大揭秘:掌握动画技巧,让你的界面动起来,告别枯燥与乏味!
【8月更文挑战第31天】在WPF应用开发中,动画能显著提升用户体验,使其更加生动有趣。本文将介绍WPF动画的基础知识和实现方法,包括平移、缩放、旋转等常见类型,并通过示例代码展示如何使用`DoubleAnimation`创建平移动画。此外,还将介绍动画触发器的使用,帮助开发者更好地控制动画效果,提升应用的吸引力。
238 0
|
6月前
|
前端开发 数据安全/隐私保护 容器
简约渐变色登陆布局html+css代码
这是一段包含HTML和CSS代码的摘要。HTML部分定义了一个基本的网页结构,包括`&lt;html&gt;`、`&lt;head&gt;`、`&lt;body&gt;`标签,以及一个简单的登录界面,由一个容器`.container`包含一个登录框`.login-wrapper`,登录框内有输入框和登录按钮。CSS部分设置了全局样式,如字体、边距,并为HTML元素添加了样式,如背景渐变色、文字对齐、输入框和按钮的样式等。整个代码展示了创建一个具有响应式布局和特定视觉效果的简洁登录页面。
72 0
|
7月前
uniapp九宫格概率抽奖功能
uniapp九宫格概率抽奖功能
77 0
|
Android开发
撸一款”灵动“的滑动按钮
撸一款”灵动“的滑动按钮
|
小程序 开发者
如何实现一个好看的金币效果
如图,是我最新上线的游戏【彩虹星球大冒险】中的金币拾取效果,打金币作为这个游戏中的一个非常重要的体验,把金币拾取效果做的好看就显得尤为重要。今天就跟大家分享一个,如何实现一个这样好看的金币拾取效果。 观察一下上面的动图,金币从出现到消失总共是分为两个过程的。 金币从爆炸的物体中向上弹出,并进行旋转下落 玩家碰到金币后,金币放大旋转然后飞到屏幕的左上角记录金币的位置后消失 接下来我们以一个具体的实例,来逐步的实现整个金币效果。
229 0
如何实现一个好看的金币效果
|
JavaScript
九宫格抽奖(原生js)
九宫格抽奖(原生js)
95 0
|
小程序 JavaScript
小程序实现大转盘仿天猫抽奖 跑马灯效果(有图有源码)---微信小程序源码大集004
小程序实现大转盘仿天猫抽奖 跑马灯效果(有图有源码)---微信小程序源码大集004
288 0
|
图形学
如何做出好看的粒子效果
嗨!大家好,我是小蚂蚁。 微信小游戏制作工具提供了简单的粒子插件,使用起来简单明了(如果你用过Unity的粒子组件就知道这个有多简单明了了),虽然功能相对简单,可设置的属性也有限,但是我们仍然能够用它在游戏中做出漂亮的效果。 比如说在彩虹星球大冒险中,所有的爆炸都是使用的粒子效果来实现的。
139 0