整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

国庆风格的活动抽奖页面的示例代码

下是一个简单的国庆风格的活动抽奖页面的示例代码。页面中有一个醒目的十一标志,以及一些国庆相关的元素和活动信息。

html复制代码


<!DOCTYPE html>


<html>


<head>


<title>国庆抽奖活动</title>


<style>


body {


background-color: #f2f2f2;


font-family: Arial, sans-serif;


text-align: center;


}




.container {


max-width: 600px;


margin: 0 auto;


padding: 20px;


}




.logo {


width: 200px;


height: 200px;


background-image: url('path/to/logo.png');


background-size: cover;


margin: 0 auto;


display: block;


}




.prizes {


list-style-type: none;


padding: 0;


}




.prize {


margin-bottom: 20px;


}




.prize-item {


font-weight: bold;


}




.button {


display: inline-block;


background-color: #ff0000;


color: #fff;


text-align: center;


padding: 10px 20px;


margin: 10px 2px;


cursor: pointer;


border: none;


border-radius: 5px;


}


</style>


</head>


<body>


<div class="container">


<div class="logo"></div>


<h1>国庆抽奖活动</h1>


<p>欢庆国庆,赢取丰厚奖品!</p>


<ul class="prizes">


<li class="prize">


<div class="prize-item">iPhone 13</div>


<div class="prize-item">价值 6999 元</div>


</li>


<li class="prize">


<div class="prize-item">Kindle Paperwhite</div>


<div class="prize-item">价值 1299 元</div>


</li>


<li class="prize">


<div class="prize-item">国庆纪念品</div>


<div class="prize-item">价值 50 元</div>


</li>


</ul>


<a href="#" class="button">立即参与</a>


</div>


</body>


</html>

年快乐

每当我们在元旦,年会的时刻,总是无法避免地出现抽奖环节。身为专业程序员的我们自然应当负起这份责任,确保这场抽奖活动能够顺利流畅地进行下去。然而,面对众多待完成的工作任务,我们恐怕又需要进一步延长加班时间来应对。请别担忧,在此,为您提供了一款卓越出色的现成抽奖网页,可用于此次年度盛典的抽奖环节中。首先,让我们共同欣赏一下实际应用表现吧!

抽奖效果

此页面所有实现均采用最基本的JavaScript、html和jQuery技术完成,无需使用任何框架,开箱即用。

设置数据

参与抽奖的数据需要提前设定好,在 js 目录中,data.js 里,文件和结构如下:

人员数据

personArray.push({
  id: 546,
  image :"img/tx.png",
  thumb_image :"img/tx.png",
  name: "张三"
});

每个数据都按此标准结构构建即可。img 可以使用默认的, 也可以自行提供照片,id 需要随机指定一个数字,保证不与列表内的其他数据相同即可。设置新数据后刷新后就能使用。

功能扩展

现有的功能里没有作弊选项(不能设置必中项),而且一个人可以重复多次中奖,因此需要添加以下内容来扩展。

# 编辑lucy.js
# 在Obj 对象下定义两个变量

Obj.writeList = [0] # 用于存放白名单列表
Obj.hasLuck = [] # 用于记录已中奖下标

# 新增去重函数
function doRepeatResult(num){
  console.log(Obj.hasLuck.length, personArray.length)
  if(Obj.hasLuck.includes(num)){
    console.log('存在重复中奖, 重新抽奖', num )
    num = num - 1
    if(num < 0){
      num = num + personArray.length
    }
    if(Obj.hasLuck.length >= personArray.length){
      return 0
    }
    return doRepeatResult(num)
  }
  return num
}

# 重写中奖随机函数
function randomLuckyArr() {
    Obj.luckyResult = [];
    for (var i = 0; i < Obj.luckyNum; i++) {
        var random = Math.floor(Math.random() * personArray.length);
        if (Obj.luckyResult.indexOf(random) == -1) {
    if(Obj.writeList.length > 0 && Obj.hasLuck.length > 2){
      random = Obj.writeList[0]
      random = doRepeatResult(random)
      Obj.luckyResult.push(random)
      Obj.writeList.shift()
    } else {
      random = doRepeatResult(random)
      Obj.luckyResult.push(random)
    }
            Obj.hasLuck.push(random)
        } else {
            i--;
        }
  console.log("已中奖下标", Obj.hasLuck)
    }
}

在上述代码中, 提供一个去重函数,并使用递归调用,保证每次数据都做去重校验。如果数据有重复,则使用当前下标减一,如果小于 0 则,直接将下标调到最大,如果所有人都中奖了, 则始终返回第一个人的结果。

在randomLuckyArr 中, 则调用去重函数,并将每次中奖的数据都保存到 hasLuck 中。

对于需要暗箱的内容的内容则在luckyResult.push 之前,写好相应的逻辑即可,如上代码中,就是抽 3 回后保证第 4 回,中奖的人为writeList 中的(暗箱虽好,可不要贪杯[灵光一闪])。

有需要的朋友请来个三连获取。

#文章首发挑战赛#

#头条创作挑战赛#

#挑战30天在头条写日记#

#我的2023年终总结#

动策划人员策划这个抽奖页面,用于app内。

当时,这个转盘布局我踩坑了,我本以为这么简单的布局应该不用绝对定位的,是我想多了!然后改为绝对定位来实现,因为要简单些。

抽奖转盘

一、九个格子和开始按钮,页面布局的实现思路

这个用绝对定位,小格子相对于大转盘定位,这个我就给个简单例子就好了哈,我相信你们能懂起的,如果没理解到我再详说。

标注

如上图所示,大框为父容器,九个小格子为子容器

<div class="parent">
 <div class="child child1"></div> 
 <div class="child child2"></div> 
 <div class="child child3"></div> 
 .......
 <div class="child child9" id="start"></div> 
</div>
<style>
 .parent{
 position: relative;
 .child{
 position: absolute;
 }
 .child1{
 top: 0;
 left: 0;
 }
 ......
 .active{
 background-color: darkgoldenrod;
 }
 }
</style>

二、转动效果实现:(下面贴出vue文件的html和js代码,css代码没有。因为全贴出来太多了,如果想看详细代码,就到我的github仓库去观看或者下载)

转动前.png

转动后.png

app.vue

// template
<template>
 <div id="rotary-table">
 <div class="award" v-for="(award,index) in awards" :class="['award'+index,{'active': index==current}]">
 {{award.name}}
 </div>
 <div id="start-btn" @click="start">开始</div>
 </div>
</template>
// js
export default {
 name: 'get-award',
 data() {
 return {
 current: 0, 
 awards: [ // 奖品数组
 { id: 1, name: '空' },
 { id: 2, name: '眼镜' },
 { id: 3, name: '包' },
 { id: 4, name: '笨驴' },
 { id: 5, name: '书' },
 { id: 6, name: '手链' },
 { id: 7, name: '美女' },
 { id: 8, name: 'iphone' }
 ],
 speed: 200, // 速度
 diff: 15, // 速度增加的值
 award: {}, // 抽中的奖品
 time: 0 // 记录开始抽奖时的时间
 };
 },
 methods: {
 start(){
 // 开始抽奖
 this.drawAward();
 this.time = Date.now();
 this.speed = 200;
 this.diff = 15;
 },
 drawAward(){
 // 请求接口, 这里我就模拟请求后的数据(请求时间为2s)
 setTimeout( () => {
 this.award = {
 id: '4',
 name: '笨驴',
 };
 }, 2000 );
 this.move();
 },
 move(){
 window.timeout = setTimeout( () => {
 this.current++;
 if ( this.current > 7 ) {
 this.current = 0;
 }
 // 若抽中的奖品id存在,则开始减速转动
 if ( this.award.id && ( Date.now() - this.time ) / 1000 > 2 ) {
 this.speed += this.diff; // 转动减速
 // 若转动时间超过4秒,并且奖品id等于小格子的奖品id,则停下来!
 if ( ( Date.now() - this.time ) / 1000 > 4 && this.award.id == this.awards[ this.current ].id ) {
 clearTimeout( window.timeout );
 setTimeout( () => {
 alert( this.award.name );
 }, 0 );
 return;
 }
 // 若抽中的奖品不存在,则加速转动
 } else {
 this.speed -= this.diff; // 转动加速
 }
 this.move();
 }, this.speed );
 }
 }
};

结尾发言

如果没有理解到,可以留言问我哈。这是我专门写的小demo,希望能帮到大家。谢谢!

代码仓库地址:https://github.com/lingziyb/get-award