基于jquery实现在线选座订座之影院篇


Posted in Javascript onAugust 24, 2015

先给大家展示效果图(支持源码下载哦):

基于jquery实现在线选座订座之影院篇

查看演示          源码下载

我们在线购票时(如电影票、车票等)可以自己选座。开发者会在页面上列出座次席位,用户可以一目了然的看到可以选择的座位及支付。本文以电影院购票为例,为您展示如何选座、处理选座数据等。

在这里,我给大家介绍一款基于jQuery的在线选座插件:jQuery Seat Charts,它支持自定义座位类型和价格,支持自定义样式,支持设置不可选的座位,也支持键盘控制座位。

HTML

我们假设进入电影《星际穿越》的选座页面,页面布局请看上面的大图,页面左边将在#seat-map中显示影院的座位布局图,右侧#booking-details显示影片相关信息以及选中的座位信息#selected-seats和票价金额信息,选择座位后确认到支付页面完成支付。

<div class="demo"> 
 <div id="seat-map"> 
 <div class="front">屏幕</div>   
 </div> 
 <div class="booking-details"> 
 <p>影片:<span>星际穿越3D</span></p> 
 <p>时间:<span>11月14日 21:00</span></p> 
 <p>座位:</p> 
 <ul id="selected-seats"></ul> 
 <p>票数:<span id="counter">0</span></p> 
 <p>总计:<b>¥<span id="total">0</span></b></p> 
 <button class="checkout-button">确定购买</button> 
 <div id="legend"></div> 
 </div> 
</div>

CSS

使用CSS将页面中的各个元素美化,尤其是座位列表布局,为座位状态(已售出、可选座位、已选座位等)设置不同的样式,我们已经整理好CSS代码,当然你可以根据自己项目页面风格自己修改任意CSS代码。

.front{width: 300px;margin: 5px 32px 45px 32px;background-color: #f0f0f0; color: #666;text-align: center;padding: 3px;border-radius: 5px;} 
.booking-details {float: right;position: relative;width:200px;height: 450px; } 
.booking-details h3 {margin: 5px 5px 0 0;font-size: 16px;} 
.booking-details p{line-height:26px; font-size:16px; color:#999} 
.booking-details p span{color:#666} 
div.seatCharts-cell {color: #182C4E;height: 25px;width: 25px;line-height: 25px;margin: 3px;float: left;text-align: center;outline: none;font-size: 13px;} 
div.seatCharts-seat {color: #fff;cursor: pointer;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius: 5px;} 
div.seatCharts-row {height: 35px;} 
div.seatCharts-seat.available {background-color: #B9DEA0;} 
div.seatCharts-seat.focused {background-color: #76B474;border: none;} 
div.seatCharts-seat.selected {background-color: #E6CAC4;} 
div.seatCharts-seat.unavailable {background-color: #472B34;cursor: not-allowed;} 
div.seatCharts-container {border-right: 1px dotted #adadad;width: 400px;padding: 20px;float: left;} 
div.seatCharts-legend {padding-left: 0px;position: absolute;bottom: 16px;} 
ul.seatCharts-legendList {padding-left: 0px;} 
.seatCharts-legendItem{float:left; width:90px;margin-top: 10px;line-height: 2;} 
span.seatCharts-legendDescription {margin-left: 5px;line-height: 30px;} 
.checkout-button {display: block;width:80px; height:24px; line-height:20px;margin: 10px auto;border:1px solid #999;font-size: 14px; cursor:pointer} 
#selected-seats {max-height: 150px;overflow-y: auto;overflow-x: none;width: 200px;} 
#selected-seats li{float:left; width:72px; height:26px; line-height:26px; border:1px solid #d3d3d3; background:#f7f7f7; margin:6px; font-size:14px; font-weight:bold; text-align:center}

jQuery

本实例基于jQuery,所以别忘了要先加载jquery库和选座插件:jQuery Seat Charts。

<script type="text/javascript" src="jquery.js"></script> 
<script type="text/javascript" src="jquery.seat-charts.min.js"></script>

接下来我们定义好诸如票价,座位区,票数,总计金额之类的元素,然后调用插件:$('#seat-map').seatCharts()。

我们先设置好座位图,一个放映厅的座位是固定好的。在本例中,第三排是过道,以及三四排的右侧空位是出口,最后一排我们设置了情侣座,那么放映厅的布局是这样的:

aaaaaaaaaa
aaaaaaaaaa
__________
aaaaaaaa__
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aa__aa__aa

我们用字母a表示座位,用符号_表示空的,即没有座位,当然你也可以用a,b,c等代表不同等级的座位。

然后定义图例样式,关键是侦探点击事件click():用户点击座位时,如果座位状态为可选(available),那么点击座位后,将座位信息(几排几座)加入到右侧的已选座列表中,并计算总票数和总金额;如果座位状态为已选中(selected),那么再次点击座位后,则会将已选中的座位信息从右侧的座位列表中删除,并将状态设置可选;如果座位状态为已售出(unavailable),则不可点击座位。最后使用get()方法将已售出的座位号状态设置为已售出。

以下是详细代码:

var price = 80; //票价 
$(document).ready(function() { 
 var $cart = $('#selected-seats'), //座位区 
 $counter = $('#counter'), //票数 
 $total = $('#total'); //总计金额 
 var sc = $('#seat-map').seatCharts({ 
 map: [ //座位图 
  'aaaaaaaaaa', 
  'aaaaaaaaaa', 
  '__________', 
  'aaaaaaaa__', 
  'aaaaaaaaaa', 
  'aaaaaaaaaa', 
  'aaaaaaaaaa', 
  'aaaaaaaaaa', 
  'aaaaaaaaaa', 
  'aa__aa__aa' 
 ], 
 legend : { //定义图例 
  node : $('#legend'), 
  items : [ 
  [ 'a', 'available', '可选座' ], 
  [ 'a', 'unavailable', '已售出'] 
  ]   
 }, 
 click: function () { //点击事件 
  if (this.status() == 'available') { //可选座 
  $('<li>'+(this.settings.row+1)+'排'+this.settings.label+'座</li>') 
   .attr('id', 'cart-item-'+this.settings.id) 
   .data('seatId', this.settings.id) 
   .appendTo($cart); 
  $counter.text(sc.find('selected').length+1); 
  $total.text(recalculateTotal(sc)+price); 
  return 'selected'; 
  } else if (this.status() == 'selected') { //已选中 
  //更新数量 
  $counter.text(sc.find('selected').length-1); 
  //更新总计 
  $total.text(recalculateTotal(sc)-price); 
  //删除已预订座位 
  $('#cart-item-'+this.settings.id).remove(); 
  //可选座 
  return 'available'; 
  } else if (this.status() == 'unavailable') { //已售出 
  return 'unavailable'; 
  } else { 
  return this.style(); 
  } 
 } 
 }); 
 //已售出的座位 
 sc.get(['1_2', '4_4','4_5','6_6','6_7','8_5','8_6','8_7','8_8', '10_1', '10_2']).status('unavailable'); 
}); 
//计算总金额 
function recalculateTotal(sc) { 
 var total = 0; 
 sc.find('selected').each(function () { 
 total += price; 
 }); 
 return total; 
}

说明

jQuery Seat Charts插件提供了多个选项设置和方法调用,具体可参照项目官网:

https://github.com/mateuszmarkowski/jQuery-Seat-Charts。

以上代码使用jquery实现在线选座订座之影院篇,希望大家喜欢。

Javascript 相关文章推荐
js url传值中文乱码之解决之道
Nov 20 Javascript
JavaScript游戏之是男人就下100层代码打包
Nov 08 Javascript
IE6下CSS图片缓存问题解决方法
Dec 09 Javascript
JS中showModalDialog 的使用解析
Apr 17 Javascript
js的隐含参数(arguments,callee,caller)使用方法
Jan 28 Javascript
js 事件截取enter按键页面提交事件示例代码
Mar 04 Javascript
Javascript编写俄罗斯方块思路及实例
Jul 07 Javascript
jquery性能优化高级技巧
Aug 24 Javascript
JS实现带有抽屉效果的产品类网站多级导航菜单代码
Sep 15 Javascript
基于jquery实现图片相关操作(重绘、获取尺寸、调整大小、缩放)
Dec 25 Javascript
vue实现分页组件
Jun 16 Javascript
javascript移动端 电子书 翻页效果实现代码
Sep 07 Javascript
js淡入淡出的图片轮播效果代码分享
Aug 24 #Javascript
jquery地址栏链接与a标签链接匹配之特效代码总结
Aug 24 #Javascript
jquery实现鼠标滑过显示二级下拉菜单效果
Aug 24 #Javascript
js实现的简洁网页滑动tab菜单效果代码
Aug 24 #Javascript
jquery+html5烂漫爱心表白动画代码分享
Aug 24 #Javascript
jquery+CSS实现的多级竖向展开树形TRee菜单效果
Aug 24 #Javascript
jQuery超酷平面式时钟效果代码分享
Mar 30 #Javascript
You might like
使用eAccelerator加密PHP程序
2008/10/03 PHP
PHP strtok()函数的优点分析
2010/03/02 PHP
PHP远程采集图片详细教程
2014/07/01 PHP
php使用正则验证中文
2016/04/06 PHP
php接口技术实例详解
2016/12/07 PHP
PHP PDO操作MySQL基础教程
2017/06/05 PHP
Ext JS添加子组件的误区探讨
2013/06/28 Javascript
JavaScript实现随机替换图片的方法
2015/04/16 Javascript
javascript实现表格增删改操作实例详解
2015/05/15 Javascript
JavaScript模拟鼠标右键菜单效果
2020/12/08 Javascript
AngularJS实现使用路由切换视图的方法
2017/01/24 Javascript
jQuery实现在新增加的元素上添加事件方法案例分析
2017/02/09 Javascript
JS获取浮动(float)元素的style.left值为空的快速解决办法
2017/02/19 Javascript
浅谈Angular4实现热加载开发旅程
2017/09/08 Javascript
QML实现圆环颜色选择器
2019/09/25 Javascript
在Python中操作时间之strptime()方法的使用
2020/12/30 Python
用Python编写简单的微博爬虫
2016/03/04 Python
python 时间戳与格式化时间的转化实现代码
2016/03/23 Python
Python 由字符串函数名得到对应的函数(实例讲解)
2017/08/10 Python
python爬虫_微信公众号推送信息爬取的实例
2017/10/23 Python
Python爬虫获取图片并下载保存至本地的实例
2018/06/01 Python
Python单向链表和双向链表原理与用法实例详解
2018/08/31 Python
python直接获取API传递回来的参数方法
2018/12/17 Python
Python不同目录间进行模块调用的实现方法
2019/01/29 Python
详解python配置虚拟环境
2019/04/08 Python
Python pyautogui模块实现鼠标键盘自动化方法详解
2020/02/17 Python
windows10环境下用anaconda和VScode配置的图文教程
2020/03/30 Python
基于python实现操作git过程代码解析
2020/07/27 Python
OpenCV+Python3.5 简易手势识别的实现
2020/12/21 Python
纯CSS实现右侧底部悬浮效果(悬浮QQ、微信、微博、邮箱等联系方式)
2015/04/24 HTML / CSS
高考备战决心书
2014/03/11 职场文书
写求职信要注意什么问题
2014/04/12 职场文书
2014年大学生村官工作总结
2014/11/19 职场文书
2014年度个人工作总结范文
2015/03/09 职场文书
综合办公室主任岗位职责
2015/04/01 职场文书
2015年办公室主任工作总结
2015/04/09 职场文书