原生js之抽奖系统网页开发(二)

接下来,继续开发:
第一步,先渲染抽奖人员名字列表:
新建index.js并引入到页面内<script src="./js/index.js"></script>
下面是index.js代码
//先定义一个数组
var array = ['刘春红', '黄雪', '赵茜', 
             '侯红霞', '滕瑶', '李忠宝', '蒋月悦', '李佳美', 
             '陈洪霞', '郭继', '王国芽', '李万梅', '张洪嘉', 
             '王思棋', '徐雨轩', '张晓', '李静','任永浩','乔自静','杨柯','唐雨','苗依依',
             '李媚琴','李天梅','孙圆圆','王涛','罗心月','段春梅','文萍',
             '袁仕琴','方娅兰','余珊','朱路林','龚俊杰','范国良'];
//然后获取我们的`ul`dom元素
var ul = document.getElementById('_ul');;
//然后动态创建li,并且使用appendChild添加到我们的`ul`dom元素下
//创建元素用什么?是不是 document.createElement('li')  
//好,那么添加元素是什么方法啊?是不是appendChild呀!
//对,添加到哪里呢?是不是ul下面啊。
//那么使用刚才获取的ul.appendChild(xxx)是不是就可以啊
//xxx是什么,很明显是document.createElement('li') 
//我们不能只添加一个li呀,页面内有很多人员,就有很多li
//所以我们要循环遍历我们刚才定义的数组array
//一般我们会定义一个方法,比如我们教init
function init(){
  //动态创建li
for(var i = 0;i<array.length; i++){
   var oli =  doeument.createElement('li');
    ul.appendChild(oli) 
    //只创建了但是没有文字,是不行的,对吧
    //使用innerHTML或者innerText赋值
    oli.innerText = array[i]
  }
}
init();
image.png
下面,继续,两个按钮,停止抽奖按钮是默认隐藏的,四张图片默认是隐藏的。
.stop,#img1,#img2,#img3,#img4{
  display: none;
}

那就隐藏下,先给两个按钮各加一个id
 <button class="start" id="start">开始抽奖</button>
 <button class="stop" id="stop">停止抽奖</button>
然后继续在index.js内写代码
//先获取两个按钮
var startBtn = document.getElementById('start');
var stopBtn = document.getElementById('stop');
下面应该怎么做呢,是不是要点击开始抽奖按钮了啊。
//监听开始按钮的点击事件
//监听事件用什么啊,还有同学记得吗?是不是 addEventListener 啊
startBtn.addEventListener('click',()=>{
  
})
//我们可以测试下,我们的事件监听是不是好使,我们在回调函数里弹出一个 `alert(1)`
//经过测试,是可以的,那么我们继续往下写,来看演示网页,我们先不管上面的随机数,先看按钮和图片的变化
//好,我们可以看到点击开始按钮后,开始按钮变成禁用状态,2到3秒后右侧图片出现,来了老弟 音频开始播放,10秒后停止抽奖按钮出现
//ok,下面我们就来实现这个几个需求
//开始按钮变成禁用状态
start.disabled = true
//手型变成禁止点击的样式
startBtn.style.cursor = 'no-drop'
//2到3秒后右侧图片出现
setTimeout(() => {
  
}, 2500)
定时器写好了,图片用什么获取啊?
setTimeout(() => {
  var img2 = document.getElementById('img2')
  //img2.style.display = 'block'
  img2.style.opacity = '1'
}, 2500)
//下面实现 来了老弟 音频开始播放
 var music1 = document.getElementById('music1')
 music1.play()
//实现10秒后停止按钮出现
setTimeout(() => {
   stopBtn.style.display = 'inline-block'
   stopBtn.style.opacity = '1'
}, 10000)
图片出现的太突兀,同样的 利用 js 动态添加animated bounceIn
img2.className = 'animated bounceIn'
image.png
接下里,我们来实现随机抽奖效果。
//先来分析下,抽奖的时候,名字的li是不是随机加了一个选中效果啊,我们先来写一个active选中的style样式。
.active {
    background-color: #f1084a;
}
然后写js,首先他是一个循环定时器setInterval
//随机数Math.random(),取随机数组长度内的随机整数Math.floor(Math.random() * array.length);
setInterval(()=>{
  var random = Math.floor(Math.random() * array.length);
  console.log(random);
  //拿到ul的下的随机的子元素用什么 ul.children[random]
  //在动态添加active类名之前 要把所有的li的active类名先清空 
  for(var i = 0; i < array.length; i++) {
    ul.children[i].className = '';
  }
  ul.children[random].className = 'active';
},50)
ok,我们已经实现了随机抽奖,下面实现点击停止抽奖按钮的功能需求
老规矩,先来分析下,监听停止按钮点击事件后,左侧图片出现,网页两侧图片出现,随机数 定时器 关闭,并显示中奖人姓名替换幸运者文字,停止第一个音乐,响起第二个中奖的音乐
现在开始编码
//监听停止按钮点击事件
stopBtn.addEventListener('click',()=>{
  //左侧图片出现
  var img1 = document.getElementById('img1')
   img1.style.opacity = '1'
   img1.className = 'animated bounceIn'
//第一个音乐停止
 var music1 = document.getElementById('music1')
   music1.pause()
//第二个音乐播放
 var music2 = document.getElementById('music2')
   music2.play()
//随机数 定时器 关闭
clearInterval(timer)
//并显示中奖人姓名替换`幸运者`文字
//首先要找到className叫active的元素
var active = document.getElementsByClassName('active')[0]
var lucking = document.getElementsByClassName('lucking')[0]
    lucking.innerText = active.innerText
//左右两侧图片出现
var img3 = document.getElementById('img3')
   var img4 = document.getElementById('img4')
   img3.style.opacity = 1
   img4.style.opacity = 1
   img3.className = 'animated bounceIn'
   img4.className = 'animated bounceIn'
})
image.png

END!!!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,463评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,868评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,213评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,666评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,759评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,725评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,716评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,484评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,928评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,233评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,393评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,073评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,718评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,308评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,538评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,338评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,260评论 2 352

推荐阅读更多精彩内容