> 文档中心 > 前端项目 电影院选座付款系统 【原生 JS 实现 页面美观简洁】

前端项目 电影院选座付款系统 【原生 JS 实现 页面美观简洁】


       本篇文章写的是一个电影院的选座与页面跳转系统,因为时间仓促,只写了 3号厅的选座系统,后期有时间会写一个完整的功能更完备的电影院系统。

       本项目完全使用原生JS实现,共有下列功能:两种座位价格 22 元 和 23元,包场功能,清空已选座位功能,点击支付后会将总价格传入付款界面,数据在页面间传递使用的是 JS 的本地存储 .......

文章目录:

 效果展示:

主页面:

选座页面:

 开始选座:

 包场:

 页面跳转:

 代码分析:第一个页面(选座界面)

第一个页面获取到的元素:

两个价位座位的点击事件:

全选按钮的点击全选事件:

清除按钮的清除已选事件:

支付按钮的支付提交事件:

关闭按钮与选座按钮的点击事件:

 代码分析:第二个页面(付款界面)

第二个页面的元素获取:

获取第一个页面传来的价格:

点击付款方式切换二维码:

返回第一个页面:

选座界面完整代码:

付款界面完整代码:


效果展示:

主页面:

选座页面:

点击选座后即可弹出选座框进入选座

 开始选座:

座位价格分为两种,红色的为 22元,黑色的为 32元,选择后支付按钮会变为对应价格,点击清除按钮后会将已选座位清除,也可以点击选过的位置来清除某个座位

 包场:

点击包场按钮后会选上所有的座位,再点即可取消全选,点击清除按钮后会将已选座位清除

 页面跳转:

点击支付后会等待五秒再进入付款界面,方便人们打开手机准备好付款,更加人性化的设计往往更能融入社会

 五秒后便会跳转到第二个付款页面,并且要支付的价格会传入这个页面( localStroage ),此页面也可以点击返回返回到首页,这个页面还可以进行三种支付方式的点击切换,更能融入更多人

 以上就是此案例的全部页面展示


 代码分析:第一个页面(选座界面)

第一个页面获取到的元素:

      var set22=document.querySelector('.set').querySelectorAll('.price22');  //22元的座位      var set32=document.querySelector('.set').querySelectorAll('.price32');  //32元的座位      var btn_buy=document.querySelector('.buy'); //支付按钮      var btn_all=document.querySelector('.all'); //全选按钮      var btn_clear=document.querySelector('.clear');  //清除按钮      var btn_close=document.querySelector('.close');  //关闭按钮      var outbox=document.querySelector('.outbox')  //获取到整个大盒子,包括选座框和关闭按钮      var a=document.querySelector('a');  //跳转的页面链接      var mask=document.querySelector('.mask');  //遮盖层(点击后半透明度遮盖全页面)      var btn_select=document.querySelector('.select');   //首页选择按钮

两个价位座位的点击事件:

for(var i=0;i0){     nums=num22+num32     price=num22*22+num32*32     btn_buy.innerHTML='您已选择了'+ nums +'个座位,共'+ price +'元'     btn_buy.className='buy current'    }    else if(num22+num32==0){     btn_buy.innerHTML='支付'   } })      }      for(var i=0;i0){     nums=num22+num32     price=num22*22+num32*32     btn_buy.innerHTML='您已选择了'+ nums +'个座位,共'+price+'元'     btn_buy.className='buy current'   }   else if(num22+num32==0){     btn_buy.innerHTML='支付'   } })      }

全选按钮的点击全选事件:

flag=0      btn_all.addEventListener('click',function(){ if(flag==0){   for(var i=0;i<set22.length;i++){    set22[i].style.backgroundColor='rgb(255, 169, 83)'    set22[i].innerHTML='✔'    num22=set22.length;  }  for(var i=0;i<set32.length;i++){    set32[i].style.backgroundColor='rgb(255, 169, 83)'    set32[i].innerHTML='✔'    num32=set32.length;  }  price=parseInt(set22.length)*22+parseInt(set32.length)*32  btn_buy.innerHTML='您选择了包场,共'+price+'元'  btn_buy.className='buy current'  flag=1 }else if(flag==1){   for(var i=0;i<set22.length;i++){    set22[i].style.backgroundColor=''    set22[i].innerHTML=''    num22=0    num32=0  }   for(var i=0;i<set32.length;i++){    set32[i].style.backgroundColor=''    set32[i].innerHTML=''  }  btn_buy.innerHTML='支付'  flag=0; }      })

清除按钮的清除已选事件:

 btn_clear.addEventListener('click',function(){ for(var i=0;i<set22.length;i++){   if(set22[i].innerHTML=='✔'){     set22[i].style.backgroundColor=''     set22[i].innerHTML=''     num22=0   } } for(var i=0;i<set32.length;i++){   if(set32[i].innerHTML=='✔'){     set32[i].style.backgroundColor=''     set32[i].innerHTML=''     num32=0   } } btn_buy.innerHTML='支付'      })

支付按钮的支付提交事件:

btn_buy.addEventListener('click',function(){ btn_buy.disabled='true' if(num22+num32>0){   var time=5   var timer=window.setInterval(function(){   if(time==0){     clearInterval(timer)     btn_buy.innerHTML='支付'     time=5     for(var i=0;i<set22.length;i++){ if(set22[i].innerHTML=='✔'){   set22[i].style.backgroundColor=''   set22[i].innerHTML=''   num22=0 }      }      for(var i=0;i<set32.length;i++){ if(set32[i].innerHTML=='✔'){   set32[i].style.backgroundColor=''   set32[i].innerHTML=''   num32=0 }      }      a.click();   }else{     btn_buy.innerHTML=time +'秒后进入付款页面'     time--;   } },1000) window.localStorage.setItem('price3',price) }      })

关闭按钮与选座按钮的点击事件:

btn_close.addEventListener('click',function(){ btn_close.click()   outbox.style.display='none'   mask.style.display='none'      })      btn_select.addEventListener('click',function(){ outbox.style.display='block' mask.style.display='block'      })


 代码分析:第二个页面(付款界面)

第二个页面的元素获取:

 var jiaqian=document.querySelector('.jiaqian');  //价格显示的位置 var btns=document.querySelectorAll('button')    //三个付款方式按钮 var lis=document.querySelectorAll('li')   //三个付款码图片 var btn_fanhui=document.querySelector('.fanhui')  //返回键 var a=document.querySelector('a')    //跳转至第一个页面

获取第一个页面传来的价格:

使用了 localStorage 本地存储

price=window.localStorage.getItem('price3')

点击付款方式切换二维码:

使用 自定义属性

for(var i=0;i<btns.length;i++){     btns[i].setAttribute('index',i)     btns[i].addEventListener('click',function(){  var index=this.getAttribute('index');   for(var i=0;i<lis.length;i++){lis[i].style.display='none'   }   lis[index].style.display='block'     }) }

返回第一个页面:

 btn_fanhui.addEventListener('click',function(){     a.click() })

选座界面完整代码:

( 图片请自己添加 ! ! ! )

        电影票选座页面        *{ padding: 0; margin: 0;      }      body{ background: url(./phpto/6de4e89f2aa46710b597bdb6d2dafa4c.jpg) no-repeat;      }      .outbox{ display: none; position: absolute; top: 35px; left: 415px;      }      .bigbox{ box-sizing: border-box; width: 600px; height: 700px; background-color: rgb(213, 213, 213); margin: 50px auto; padding: 25px; border: 1.5px solid;      }      .head{  box-sizing: border-box;  width: 550px;  height: 70px;  background-color: rgb(98, 176, 255);  color: rgb(255, 255, 255);  text-align: center;  text-shadow: 1px 1px 1px black;  line-height: 70px;  font-size: 35px;  font-weight: bold;  border-top: 1.5px solid black;  border-left: 1.5px solid black;  border-right: 1.5px solid black;      }      .information{ box-sizing: border-box; width: 550px; height: 50px; background-color: rgb(253, 253, 253); padding: 17px; border-bottom: 1px solid; border-left: 1.5px solid; border-right: 1.5px solid;      }      .information p{ float: left; margin-right: 11px;      }      .info-set1{ float: left; box-sizing: border-box; width: 15px; height: 15px; border: 1px solid red; margin-right: 5px; -webkit-border-radius:5px; -moz-border-radius:5px; background-color: rgb(235, 235, 235);      }      .info-set2{ float: left; box-sizing: border-box; width: 15px; height: 15px; border: 1px solid ; margin-right: 5px; -webkit-border-radius:5px; -moz-border-radius:5px; background-color: rgb(235, 235, 235);      }      .info-set3{ float: left; box-sizing: border-box; width: 15px; height: 15px; border: 1px solid red; margin-right: 5px; -webkit-border-radius:5px; -moz-border-radius:5px; background-color: rgb(255, 133, 33); font-size: 10px; text-align: center; line-height: 15px; color: rgb(255, 255, 255);      }      .set{ box-sizing: border-box; width: 550px; height: 430px; background-color: rgb(255, 255, 255); margin-bottom: 20px; padding-top: 80px; border-left: 1.5px solid; border-right: 1.5px solid; border-bottom: 1.5px solid;      }      .buttons{ width: 550px; height: 80px; background-color: rgb(213, 213, 213);      }   ul{ width: 550px; box-sizing: border-box;      }      ul li{ box-sizing: border-box; float: left; width: 30px; height: 30px; margin: 10px; list-style: none; border: 1.4px solid; background-color: rgb(235, 235, 235); -webkit-border-radius:7px; -moz-border-radius:7px; cursor: pointer; text-align: center; line-height: 30px; color: rgb(255, 255, 255); font-size: 15px; border: 1.4px solid black;      }      .price22{ box-sizing: border-box; float: left; width: 30px; height: 30px; margin: 10px; list-style: none; border: 1.4px solid red; background-color: rgb(235, 235, 235); -webkit-border-radius:7px; -moz-border-radius:7px; cursor: pointer;      }      li:hover{ background-color: rgb(177, 177, 177);      }      .buttons{ box-sizing: border-box; padding-top: 7px;      }      .clear{  width: 130px;  height: 70px;  margin-right: 15px;  -webkit-border-radius:16px; -moz-border-radius:16px; border: 2px solid rgb(70, 70, 70); background-color: rgb(165, 165, 165); text-align: center; line-height: 70px; font-size: 20px; font-weight: bold; color: rgb(255, 255, 255); text-shadow: 2px 2px 2px rgb(61, 61, 61);      }      .clear:hover{ background-color: rgb(210, 210, 210);      }      .all{  width: 130px;  height: 70px;  margin-right: 15px;  -webkit-border-radius:16px; -moz-border-radius:16px; border: 2px solid rgb(70, 70, 70); background-color: rgb(165, 165, 165); text-align: center; line-height: 70px; font-size: 20px; font-weight: bold; color: rgb(255, 255, 255); text-shadow: 2px 2px 2px rgb(67, 67, 67);      }      .all:hover{ background-color: rgb(210, 210, 210);      }      .buy{  width: 250px;  height: 70px;  -webkit-border-radius:16px; -moz-border-radius:16px; border: 2px solid rgb(70, 70, 70); background-color: rgb(255, 169, 83); text-align: center; line-height: 70px; font-size: 20px; font-weight: bold; color: rgb(255, 255, 255); text-shadow: 2px 2px 2px rgb(60, 60, 60);      }      .buy:hover{ background-color: rgb(201, 27, 27);      }      .current{ font-size: 16.2px;      }      .close{ box-sizing: border-box; position: absolute; top: 55px; right: -22px; width: 20px; height: 20px; border: 1.4px solid; text-align: center; line-height: 13px; background-color: #fff; font-size: 25px; cursor: pointer;      }      .close:hover{ background-color: rgb(255, 235, 235);      }      .index{ box-sizing: border-box; width: 800px; height: 200px; margin: 200px auto; text-align: center; line-height: 200px; font-size: 55px; font-weight: bold; text-shadow: 3px 3px 3px rgb(255, 255, 255);      }      .select{ position: absolute; left: 450px; top: 460px; width: 550px; height: 130px; display: inline-block; -webkit-border-radius:56px; -moz-border-radius:56px; text-align: center; font-size: 40px; font-weight: bold; background-color: rgb(255, 171, 75); border: 2px solid gray; color: #fff; text-shadow: 3px 3px 3px black;      }      .select:hover{ background-color: rgb(128, 128, 128); border: 2px solid rgb(0, 0, 0);      }      .mask{ position: absolute; top: 0; left: 0; width: 1440px; height: 849px; background-color: rgba(0, 0, 0, 0.506); display: none;      }      
欢迎您光顾万达影城三号厅
x
万达影城 3号厅

22元

32元

已选

<!-- --> <!-- -->
num22=0; num32=0; price=0; var set22=document.querySelector('.set').querySelectorAll('.price22'); var set32=document.querySelector('.set').querySelectorAll('.price32'); var btn_buy=document.querySelector('.buy'); var btn_all=document.querySelector('.all'); var btn_clear=document.querySelector('.clear'); var btn_close=document.querySelector('.close'); var outbox=document.querySelector('.outbox') var a=document.querySelector('a'); var mask=document.querySelector('.mask'); var btn_select=document.querySelector('.select'); for(var i=0;i0){ nums=num22+num32 price=num22*22+num32*32 btn_buy.innerHTML='您已选择了'+ nums +'个座位,共'+ price +'元' btn_buy.className='buy current' } else if(num22+num32==0){ btn_buy.innerHTML='支付' } }) } for(var i=0;i0){ nums=num22+num32 price=num22*22+num32*32 btn_buy.innerHTML='您已选择了'+ nums +'个座位,共'+price+'元' btn_buy.className='buy current' } else if(num22+num32==0){ btn_buy.innerHTML='支付' } }) } flag=0 btn_all.addEventListener('click',function(){ if(flag==0){ for(var i=0;i<set22.length;i++){ set22[i].style.backgroundColor='rgb(255, 169, 83)' set22[i].innerHTML='✔' num22=set22.length; } for(var i=0;i<set32.length;i++){ set32[i].style.backgroundColor='rgb(255, 169, 83)' set32[i].innerHTML='✔' num32=set32.length; } price=parseInt(set22.length)*22+parseInt(set32.length)*32 btn_buy.innerHTML='您选择了包场,共'+price+'元' btn_buy.className='buy current' flag=1 }else if(flag==1){ for(var i=0;i<set22.length;i++){ set22[i].style.backgroundColor='' set22[i].innerHTML='' num22=0 num32=0 } for(var i=0;i<set32.length;i++){ set32[i].style.backgroundColor='' set32[i].innerHTML='' } btn_buy.innerHTML='支付' flag=0; } }) btn_clear.addEventListener('click',function(){ for(var i=0;i<set22.length;i++){ if(set22[i].innerHTML=='✔'){ set22[i].style.backgroundColor='' set22[i].innerHTML='' num22=0 } } for(var i=0;i0){ var time=5 var timer=window.setInterval(function(){ if(time==0){ clearInterval(timer) btn_buy.innerHTML='支付' time=5 for(var i=0;i<set22.length;i++){ if(set22[i].innerHTML=='✔'){ set22[i].style.backgroundColor='' set22[i].innerHTML='' num22=0 } } for(var i=0;i<set32.length;i++){ if(set32[i].innerHTML=='✔'){ set32[i].style.backgroundColor='' set32[i].innerHTML='' num32=0 } } a.click(); }else{ btn_buy.innerHTML=time +'秒后进入付款页面' time--; } },1000) window.localStorage.setItem('price3',price) } }) btn_close.addEventListener('click',function(){ btn_close.click() outbox.style.display='none' mask.style.display='none' }) btn_select.addEventListener('click',function(){ outbox.style.display='block' mask.style.display='block' })

付款界面完整代码:

                电影票支付     *{     margin: 0;     padding: 0; } body{ background-color: rgb(178, 178, 178); background: url(./phpto/6de4e89f2aa46710b597bdb6d2dafa4c.jpg) no-repeat;      } .box{ box-sizing: border-box; width: 800px; height: 450px; background-color: rgb(213, 213, 213); margin: 160px auto; padding: 20px; padding-right: 10px; border: 1.6px solid; } .left{     box-sizing: border-box;     float: left;     width: 250px;     height: 410px;     background-color: rgb(173, 172, 172);     margin-right: 20px;     text-align: center;     padding-top: 140px;    line-height: 50px;    font-size: 25px;    font-weight: bold;    color: rgb(255, 255, 255);    text-shadow: 2px 2px 2px black; } .jiaqian{     font-size: 40px;    font-weight: bold;    color: rgb(255, 255, 255);    text-shadow: 2px 2px 2px black;    color: rgb(255, 144, 74); } .center{     box-sizing: border-box;     float: left;     width: 410px;     height: 410px;     background-color: #fff;     margin-right: 2px; } .right{     box-sizing: border-box;     float: left;     width: 80px;     height: 410px;     background-color: rgb(255, 168, 168); } .btn1{     width: 80px;     height: 137px;     font-size: 20px;     font-weight: bold;     text-shadow: 2px 2px 2px black;     color: rgb(255, 255, 255);     background-color: rgb(91, 157, 255); } .btn1:hover{     background-color: rgb(35, 103, 205); } .btn2{     width: 80px;     height: 137px;     font-size: 20px;     font-weight: bold;     text-shadow: 2px 2px 2px black;     color: rgb(255, 255, 255);     background-color: rgb(0, 220, 7); } .btn2:hover{     background-color: rgb(0, 150, 5); } .btn3{     width: 80px;     height: 137px;     font-size: 20px;     font-weight: bold;     text-shadow: 2px 2px 2px black;     color: rgb(255, 255, 255);     background-color: rgb(255, 98, 98); } .btn3:hover{     background-color: rgb(190, 2, 2); } ul{     box-sizing: border-box;     width: 410px; } li{     box-sizing: border-box;     width: 410px;     height: 410px;     list-style: none;     display: none; } img{     box-sizing: border-box;     width: 410px;     height: 410px;     border: 1.4px solid; } .fanhui{ position: absolute; left: 550px; top: 630px; width: 300px; height: 70px; display: inline-block; -webkit-border-radius:46px; -moz-border-radius:46px; text-align: center; font-size: 30px; font-weight: bold; background-color: rgb(255, 171, 75); border: 2px solid gray; color: #fff; text-shadow: 3px 3px 3px black;      }      .fanhui:hover{ background-color: rgb(128, 128, 128); border: 2px solid rgb(0, 0, 0);      }        

感谢您的购买

请您支付 

 元

  • 前端项目 电影院选座付款系统 【原生 JS 实现 页面美观简洁】
  • 前端项目 电影院选座付款系统 【原生 JS 实现 页面美观简洁】
  • 前端项目 电影院选座付款系统 【原生 JS 实现 页面美观简洁】
var jiaqian=document.querySelector('.jiaqian'); var btns=document.querySelectorAll('button') var lis=document.querySelectorAll('li') var btn_fanhui=document.querySelector('.fanhui') var a=document.querySelector('a') price=window.localStorage.getItem('price3') jiaqian.innerHTML=price for(var i=0;i<btns.length;i++){ btns[i].setAttribute('index',i) btns[i].addEventListener('click',function(){ var index=this.getAttribute('index'); for(var i=0;i<lis.length;i++){lis[i].style.display='none' } lis[index].style.display='block' }) } btn_fanhui.addEventListener('click',function(){ a.click() })