【Vue.js】实现随机抽奖

【Vue.js】实现随机抽奖

在这里插入图片描述
在这里插入图片描述

代码实例

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vue实现随机抽奖</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <style>
        #app {
            text-align: center;
        }
    </style>
</head>

<body>
    <div id="app">
        <h2>随机抽奖</h2>

        <!-- 开始按钮 -->
        <button v-if="!isStart" @click="startRandom">开始抽奖</button>

        <template v-if="isStart && !isEnd">
            <!-- 显示滚动的名单 -->
            <h3>
                {{selectedUser.name | replaceName}} —— {{selectedUser.phone | replacePhone}}
            </h3>
            <!-- 结束按钮 -->
            <button @click="endRandom">结束抽奖</button>
        </template>
        <!-- 显示最终点名的人 -->
        <h3 v-if="isEnd">
            抽到的是姓名是:{{winner.name}}<br>
            抽到的是电话是:{{winner.phone | replacePhone}}
        </h3>
    </div>
</body>
<script>
    new Vue({
        el: '#app',
        data: {
            isStart: false,
            isEnd: false,
            timer: null,
            selectedUser: {
                name: '',
                phone: ''
            },
            winner: {
                name: '',
                phone: ''
            },
            user: [
                { name: '赵一晖', phone: '13913867443' },
                { name: '钱靖鱼', phone: '15724567898' },
                { name: '李三', phone: '13566763434' },
                { name: '王小', phone: '18344445432' },
                { name: '周二贰', phone: '13344559065' },
                { name: '吴安安', phone: '15676665454' },
                { name: '郑和', phone: '19876754345' },
                { name: '王富贵天', phone: '13678844544' },
                { name: '冯九', phone: '15299935688' },
                { name: '陈十十', phone: '18434556454' },
                { name: '卫子夫', phone: '18434556454' },
                { name: '姜太公', phone: '18434556454' },
                { name: '林冲', phone: '18434556454' },
                { name: '邓宇', phone: '18434556454' },
                { name: '姚小装', phone: '18434556454' },
                { name: '希希高', phone: '18434556454' }
            ]
        },
        watch: {

        },
        filters: {
            replaceName(str) {
                if (str === '') return ''

                return str.substr(0, 1) + '***' + str.substr(-1)


            },
            replacePhone(str) {
                if (str === '') return ''
                // 子模式 捕获 反向引用(后向引用)
                // var reg = /(\d)\1{3}/g   // 使用()就是子模式,
                // 在捕获是系统会给子模式编号(从左至右,从外到里 序号从1开始)  
                // 反向引用: 在正则内部使用  \子模式编号    在正则的外部使用  $子模式编号
                const reg = /(1[3-9]\d)(\d{4})(\d{4})/
                return str.replace(reg, '$1****$3')
            }
        },
        methods: {
            startRandom() {
                this.isStart = true
                // 清除定时器
                clearInterval(this.timer)
                // 开启定时器
                this.autoScroll()
            },
            autoScroll() {
                this.timer = setInterval(() => {
                    let length = this.user.length
                    let num = Math.floor(Math.random() * length)
                    this.selectedUser = this.user[num]
                }, 100)
            },
            endRandom() {
                this.isEnd = true
                // 清除定时器
                clearInterval(this.timer)
                // 记录下点到的名字
                this.winner = this.selectedUser
                // 清空选择的用户
                this.selectedUser = {
                    name: '',
                    phone: ''
                }
            }
        }
    })
</script>

</html>

OR

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vue实现随机抽奖</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <style>
        #app{
            text-align: center;
        }
    </style>
</head>
<body>
    <div id="app">
        <h2>随机抽奖</h2>
        <!-- 显示滚动的名单 -->
        <h3 v-if = "isStart && !isEnd && selectedUser.name">
            {{selectedUser.name | replaceName}} —— {{selectedUser.phone | replacePhone}}
        </h3>
        <!-- 开始按钮 -->
        <button v-if = "!isStart" @click="startRandom">开始抽奖</button>
        <!-- 结束按钮 -->
        <button v-if = "isStart && !isEnd" @click="endRandom">结束抽奖</button>

        <!-- 显示最终点名的人 -->
        <h3 v-if = "isEnd">
            抽到的是姓名是:{{winner.name | replaceName}}<br>
            抽到的是电话是:{{winner.phone | replacePhone}}
        </h3>
    </div>
</body>
<script>
    new Vue({
        el:'#app',
        data:{
            isStart: false,
            isEnd: false,
            timer: null,
            selectedUser: [],
            winner:[],
            user:[
                { name:'赵一晖', phone:'13913867443' },
                { name:'钱靖', phone:'15724567898' },
                { name:'李三金', phone:'13566763434' },
                { name:'王小叶', phone:'18344445432' },
                { name:'周二贰', phone:'13344559065' },
                { name:'吴安安', phone:'15676665454' },
                { name:'郑和', phone:'19876754345' },
                { name:'王富贵天', phone:'13678844544' },
                { name:'冯九', phone:'15299935688' },
                { name:'陈十十', phone:'18434556454' },
                { name:'卫子夫', phone:'18434556454' },
                { name:'姜太公', phone:'18434556454' },
                { name:'林冲', phone:'18434556454' },
                { name:'邓宇', phone:'18434556454' },
                { name:'姚肖娜', phone:'18434556454' },
                { name:'希高高', phone:'18434556454' }
            ]
        },
        watch:{

        },
        filters:{
            replaceName(str){
                let replaceStr;
                if (str == '') return ''
                
                if(str.length == 2){
                    replaceStr = str.substring(1)
                }else{
                    replaceStr = str.substring(1, str.length - 1)
                }
                   
                return str.replace(replaceStr, function(ev){
                    let star = ''
                    for(let i = 0; i < ev.length; i++){
                        star += '*'
                    }
                    return star
                })
                // let replaceStr = str.substring(1, 2)
                // return str.replace(replaceStr, '*')

            },
            replacePhone(str){
                if (str == '') return ''         
                let replaceStr = str.substring(3, 7)
                return str.replace(replaceStr, '****')
            }
        },
        methods:{
            startRandom(){
                this.isStart = true
                // 清除定时器
                clearInterval(this.timer)
                // 开启定时器
                this.timer = setInterval(() => {
                    let length = this.user.length
                    let num = Math.floor(Math.random() * length)
                    this.selectedUser = this.user[num]
                }, 100)
            },
            endRandom(){
                this.isEnd = true
                // 清除定时器
                clearInterval(this.timer)
                // 记录下点到的名字
                this.winner = this.selectedUser
                // 清空选择的用户
                this.selectedUser = []
            }
        }
    })
</script>
</html>
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在HTML中使用Vue.js实现九宫格抽奖功能,首先你需要了解HTML(HyperText Markup Language)用于创建网页结构,Vue.js(一个流行的前端JavaScript框架)则提供了数据绑定和组件化的开发能力。以下是一个简单的步骤指南: 1. **设置项目结构**: 创建一个新的Vue项目,你可以使用Vue CLI工具快速初始化。 ```bash vue create my-kongguo-draw cd my-kongguo-draw ``` 2. **安装所需依赖**: 在`src`目录下,安装`vue-grid-layout`库,它可以帮助你轻松地创建网格布局。 ```bash npm install vue-grid-layout --save ``` 3. **创建组件**: - `KongGuoDraw.vue`:这是主要的组件,负责渲染九宫格并处理抽奖逻辑。 ```html <template> <div class="kong-guo-draw"> <vue-grid-layout :layout="gridLayout" @draw="onDraw"> <!-- 使用v-for遍历每个网格单元 --> <div v-for="(item, index) in gridItems" :key="index" :style="{ top: item.y, left: item.x }"> <button @click="onCellClick(index)">点击抽奖</button> </div> </vue-grid-layout> </div> </template> <script> import Vue from 'vue'; import vueGridLayout from 'vue-grid-layout'; export default { components: { vueGridLayout, }, data() { return { gridLayout: { // 初始化的网格布局配置 }, gridItems: [], // 九宫格的元素数组 }; }, methods: { onDraw() { // 在这里编抽奖逻辑 }, onCellClick(index) { // 当点击某个单元格时触发 this.gridItems[index].isDrawn = true; // 标记已抽奖 }, }, }; </script> ``` 4. **定义九宫格布局**: 在`data`中,根据九宫格的需求配置`gridLayout`和`gridItems`。九宫格通常是3x3的布局,你可以设置列数、行数和每个单元格的大小。 5. **实现抽奖逻辑**: 在`onDraw`方法中,可以根据需求决定如何选择或改变九宫格中的奖项。可能的方式包括随机选择一个单元格或者当所有单元格都被点击后选择一个。 6. **添加样式**: 在`<style>`标签内,为九宫格和按钮添加合适的CSS样式。 记得在`main.js`中导入并使用这个组件,这样九宫格抽奖功能就完成了。以上代码只是一个基础示例,实际应用中可能需要根据具体需求调整和优化。如果你有任何问题,请随时提问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值