js实现公司年会抽奖活动(亲测可用)

一般到年底大大小小公司都有会抽奖活动,一般都是一等奖、二等奖只有一个,话不多说,直接上效果图和代码。

HTML:

    <ul class="list"></ul>
    <button class="start">点击开始抽奖</button>
    <button class="end">结束抽奖</button>
    <div></div>

CSS:

        .active {
            background: pink;
            color: rgb(58, 244, 41);
        }

        .list {
            list-style-type: none;
            margin: 20px 0;
        }

        li {
            background: #eee;
            border: 1px solid #eee;
            border-radius: 5px;
            width: 200px;
            margin: 10px 0;
            height: 30px;
            line-height: 30px;
            text-align: center;
            color: #333;
        }

        button {
            width: 200px;
            height: 30px;
            line-height: 30px;
            border-radius: 5px;
            border: 1px solid #eee;
        }

        div {
            margin-top: 30px;
        }

script:

        let arr = ['苹果14', '苹果电脑', '安慰奖', '500元现金', '精品礼品一份', 
                    '100元现金红包'] // 奖励数组
        let start = document.querySelector('.start') // 开始抽奖按钮
        let end = document.querySelector('.end') // 结束抽奖按钮
        let box = document.querySelector('.list') // ul元素
        let box1 = document.querySelector('div') // div元素
        let array = [] // 抽到的奖励放的数组
        let random; // 随机数
        let reward; // 奖励值
        let timer; // 防抖函数
        let flag = false; // 是否在抽奖中

        // 渲染奖励品
        arr.forEach(item => {
            let li = document.createElement('li') // 创建li元素
            li.innerText = item // 给li元素写入内容
            box.appendChild(li) // 添加到ul元素中
        })

        // 添加高亮
        function list() {
            let list = document.querySelectorAll('li') // 获取所有li标签
            // 遍历所有li元素,先删除高亮标签,在添加目前选中的标签添加高亮
            list.forEach((item, index) => {
                item.classList.remove('active')
            })
            list[random].classList.add('active')
        }

        // 添加到array奖励数组逻辑 点击结束抽奖执行
        function fn() {
            reward = arr[random] // 奖励
            list() // 添加高亮
            let isReward = array.indexOf(reward) // 查找array数组内是否包含
            if (isReward == -1 || reward == '安慰奖' || reward == '精品礼品一份' || 
                 reward =='100元现金红包') {
                array.push(reward) // 添加到array数组
            } else {
                return fn() // 如果存在则继续生成随机奖励
            }
            console.log(array);
        }

        // 开始抽奖按钮
        start.onclick = () => {
            // 判断是否正在抽奖
            if (flag) return alert('正在抽奖,请先结束抽奖')
            // 点击开始抽奖置为true
            flag = true
            // 每0.1秒刷新一次随机数并添加高亮
            timer = setInterval(() => {
                random = parseInt(Math.random() * arr.length)
                list()
            }, 10);
        }

        // 结束抽奖按钮 
        end.onclick = () => {
            console.log(flag);
            // 如果已经点击过开始抽奖,否则提示先点击抽奖
            if (flag) {
                fn() // 获取本次抽奖抽到的奖励
                clearInterval(timer) // 清除定时器(开始抽奖每0.1秒刷新的定时器)
                // 遍历成功奖励数组渲染页面
                array.forEach(item => {
                    box1.innerText = '您获得的奖励有:' + array.join('、')
                })
                // 抽奖结束,flag置为false,表示本次抽奖结束
                flag = false
            } else {
                alert('先点击开始抽奖')
            }
        }

如果有特殊要求,要设置抽奖次数。

HTML:

    <p></p>
    <ul class="list"></ul>
    <button class="start">点击开始抽奖</button>
    <button class="end">结束抽奖</button>
    <div></div>

script:

        let arr = ['苹果14', '苹果电脑', '安慰奖', '500元现金', '精品礼品一份', 
                    '100元现金红包'] // 奖励数组
        let start = document.querySelector('.start') // 开始抽奖按钮
        let end = document.querySelector('.end') // 结束抽奖按钮
        let p = document.querySelector('p') // p元素
        let box = document.querySelector('.list') // ul元素
        let box1 = document.querySelector('div') // div元素
        let array = [] // 抽到的奖励放的数组
        let random; // 随机数
        let reward; // 奖励值
        let timer; // 防抖函数
        let flag = false; // 是否在抽奖中
        let num; // 抽奖次数
        num = arr.length
        p.innerText = `您目前还有${num}次抽奖机会`;  // 渲染p标签

        // 渲染奖励品
        arr.forEach(item => {
            let li = document.createElement('li') // 创建li元素
            li.innerText = item // 给li元素写入内容
            box.appendChild(li) // 添加到ul元素中
        })

        // 添加高亮
        function list() {
            let list = document.querySelectorAll('li') // 获取所有li标签
            // 遍历所有li元素,先删除高亮标签,在添加目前选中的标签添加高亮
            list.forEach((item, index) => {
                item.classList.remove('active')
            })
            list[random].classList.add('active')
        }

        // 添加到array奖励数组逻辑 点击结束抽奖执行
        function fn() {
            reward = arr[random] // 奖励
            list() // 添加高亮
            let isReward = array.indexOf(reward) // 查找array数组内是否包含
            if (isReward == -1 || reward == '安慰奖' || reward == '精品礼品一份' || 
                 reward =='100元现金红包') {
                array.push(reward) // 添加到array数组
            } else {
                return fn() // 如果存在则继续生成随机奖励
            }
            console.log(array);
        }

        // 开始抽奖按钮
        start.onclick = () => {
            // 判断是否正在抽奖
            if (flag) return alert('正在抽奖,请先结束抽奖')
            if(num > 0) return alert('没有抽奖机会了')
            // 点击开始抽奖置为true
            flag = true
            num--
            p.innerText = `您目前还有${num}次抽奖机会`  // 渲染p标签
            // 每0.1秒刷新一次随机数并添加高亮
            timer = setInterval(() => {
                random = parseInt(Math.random() * arr.length)
                list()
            }, 10);
        }

        // 结束抽奖按钮 
        end.onclick = () => {
            if(num > 0) return alert('没有抽奖机会了')
            console.log(flag);
            // 如果已经点击过开始抽奖,否则提示先点击抽奖
            if (flag) {
                fn() // 获取本次抽奖抽到的奖励
                clearInterval(timer) // 清除定时器(开始抽奖每0.1秒刷新的定时器)
                // 遍历成功奖励数组渲染页面
                array.forEach(item => {
                    box1.innerText = '您获得的奖励有:' + array.join('、')
                })
                // 抽奖结束,flag置为false,表示本次抽奖结束
                flag = false
            } else {
                alert('先点击开始抽奖')
            }
        }

原创不易,

如果可用,

点赞关注,

有问题欢迎在评论区留言讨论。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一些基础的实现思路和代码示例。 首先,需要准备抽奖页面的设计和布局,可以使用HTML和CSS进行页面布局和样式设置。以下是一个简单的HTML代码示例: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>抽奖页面</title> <style> /* 样式设置 */ /* ... */ </style> </head> <body> <div class="container"> <div class="prize-list"> <ul> <li>奖品1</li> <li>奖品2</li> <li>奖品3</li> <li>奖品4</li> <li>奖品5</li> </ul> </div> <div class="lottery"> <div class="lottery-btn">开始抽奖</div> </div> </div> <script> // JS代码 // ... </script> </body> </html> ``` 在页面中,包含一个奖品列表和一个抽奖按钮。接下来,需要使用JavaScript实现抽奖的逻辑。 以下是一个简单的JavaScript代码示例: ```javascript // 获取页面元素 var prizeList = document.querySelector('.prize-list ul'); var lotteryBtn = document.querySelector('.lottery-btn'); // 奖品列表 var prizes = [ '奖品1', '奖品2', '奖品3', '奖品4', '奖品5' ]; // 抽奖函数 function lottery() { // 随机选取一个奖品 var index = Math.floor(Math.random() * prizes.length); var prize = prizes[index]; // 显示中奖结果 alert('恭喜您获得了' + prize); // 在奖品列表中删除已中奖的奖品 prizes.splice(index, 1); prizeList.removeChild(prizeList.childNodes[index]); } // 绑定抽奖按钮的点击事件 lotteryBtn.addEventListener('click', function() { if (prizes.length > 0) { lottery(); } else { alert('奖品已经全部抽完了!'); } }); ``` 在JavaScript代码中,首先获取了页面中的奖品列表和抽奖按钮元素,并定义了一个奖品列表和抽奖函数。抽奖函数中,使用Math.random()函数随机选取一个奖品,并在页面中显示中奖结果。同时,从奖品列表中删除已中奖的奖品,并在页面中删除相应的列表项。 最后,将抽奖按钮的点击事件绑定到lottery()函数上,当奖品列表还有剩余奖品时,可以不断进行抽奖操作,否则提示奖品已经全部抽完。 这只是一个基础的抽奖页面实现,还可以根据实际需要进行更复杂的设计和功能扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值