基于jQuery实现在线选座之高铁版


Posted in Javascript onAugust 24, 2015

效果图展示:

基于jQuery实现在线选座之高铁版

查看演示  源码下载

除了电影院在线选座,我们还会接触到飞机机舱选座,当然也有汽车票火车票选座的。假如有一天买火车票也提供在线选座,那么今天我来给大家介绍下如何使用jQuery选座插件完成高铁列车座位布置、选座、不同等级座位计价等操作。

HTML

和上一篇文章一样:jQuery在线选座订座(影院篇),我们使用相同的html结构,左侧显示位置布局图,右侧显示选座相关信息。

相关CSS代码请下载DEMO源码查看,本文不再详述。

<div class="container"> 
 <div id="seat-map"> 
 <div class="front">01车</div> 
 </div> 
 <div class="booking-details"> 
 <h3> 选座信息:</h3> 
 <ul id="selected-seats"></ul> 
 <p>票数: <span id="counter"></span></p> 
 <p>总计: ¥<span id="total">0</span></p> 
  
 <button class="checkout-button">确定购买</button> 
 <div id="legend"></div> 
 </div> 
</div>

jQuery

重点来关注jQuery代码,我们还是使用在线选座插件:jQuery Seat Charts。首先安排高铁车厢座位布局,我假设在01号车厢内有一等座和二等座若干,中间通过出入口通道隔开,大致布局如下:

map: [ //座位图 
 'ff__ff', 
 'ff__ff', 
 '______', 
 'eee_ee', 
 'eee_ee', 
 'eee_ee', 
 'eee_ee', 
 'eee_ee', 
 'eee_ee' 
],

上面的代码f表示的是一等座,e表示的是二等座,符号"_"表示过道。

然后我们要定义座位类型的相关属性:

seats: { //定义座位属性 
 f: { 
 price : 100, 
 classes : 'first-class', 
 category: '一等座' 
 }, 
 e: { 
 price : 40, 
 classes : 'economy-class', 
 category: '二等座' 
 }  
},

上面的代码定义了一等座和二等座的价格、类别名称以及对应的css样式。他们可以在后面通过data()方法调用。

接下来我们用naming来定义座位图的行列信息,如下top设置为true则表示显示顶部横坐标(行),columns和rows分别用来定义横坐标(行)和纵坐标(列)的值,getLabel用来返回座位信息,如:01A表示01排A座。

naming : { //定义行列等信息 
 top : true, 
 columns: ['A', 'B', 'C', '', 'D','F'], 
 rows: ['01','02','','03','04','05','06','07','08','09'], 
 getLabel : function (character, row, column) { 
 return row+column; 
 } 
},

然后我们使用legend来定义图例,对应图例关联的元素是#legend,并对座位类型定义对应的样式。

legend : { //定义图例 
 node : $('#legend'), 
 items : [ 
 [ 'f', 'available', '一等座' ], 
 [ 'e', 'available', '二等座'], 
 [ 'f', 'unavailable', '已售出'] 
 ]  
},

最后在外面点击(click)座位图中的位置时,根据当前座位的状态做出不同的处理,包括计算票数和金额总计等,可以参照影院篇的说明。

click: function () { 
 if (this.status() == 'available') {//可选座 
 $('<li>'+this.data().category+'<br/>01车'+this.settings.label+'号<br/>¥'+this.data().price+'</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)+this.data().price); 
 return 'selected'; 
 } else if (this.status() == 'selected') {//已选中 
 $counter.text(sc.find('selected').length-1); 
 $total.text(recalculateTotal(sc)-this.data().price); 
 //删除已预订座位 
 $('#cart-item-'+this.settings.id).remove(); 
 return 'available'; 
 } else if (this.status() == 'unavailable') {//已售出 
 //已售出 
 return 'unavailable'; 
 } else { 
 return this.style(); 
 } 
},

最后,我们使用get()和status()方法设置已经售出不可选的座位。

//已售出不可选座

sc.get(['01_A', '04_A', '07_B', '07_F']).status('unavailable');

值得一提的是,当网站购票非常频繁时需要注意及时刷新座位图,如果座位已经被抢占了则不可选。我们可以使用ajax进行异步请求,并且设置每隔10秒钟运行一次,可以参照如下代码:

setInterval(function() { 
 $.ajax({ 
 type : 'get', 
 url : 'book.php', 
 dataType : 'json', 
 success : function(response) { 
 //遍历所有座位 
 $.each(response.bookings, function(index, booking) { 
 //将已售出的座位状态设置为已售出 
 sc.status(booking.seat_id, 'unavailable'); 
 }); 
 } 
 }); 
}, 10000); //每10秒

以上就是本文介绍基于jQuery实现在线选座之高铁版,希望大家喜欢。

Javascript 相关文章推荐
在Z-Blog中运行代码[html][/html](纯JS版)
Mar 25 Javascript
JS去除字符串的空格增强版(可以去除中间的空格)
Aug 26 Javascript
JQuery实现点击div以外的位置隐藏该div窗口
Sep 13 Javascript
利用JS判断用户是否上网(连接网络)
Dec 23 Javascript
浅析Node在构建超媒体API中的作用
Jul 30 Javascript
javaScript中push函数用法实例分析
Jun 08 Javascript
AngularJS中处理多个promise的方式
Feb 02 Javascript
Node接收电子邮件的实例代码
Jul 21 Javascript
详解vuex的简单使用
Mar 12 Javascript
微信小程序实现多个按钮的颜色状态转换
Feb 15 Javascript
layui.use模块外部使用其内部定义的js封装函数方法
Sep 16 Javascript
解决vue-router的beforeRouteUpdate不能触发
Apr 14 Vue.js
jQuery实现TAB风格的全国省份城市滑动切换效果代码
Aug 24 #Javascript
jquery实现像栅栏一样左右滑出式二级菜单效果代码
Aug 24 #Javascript
jQuery实现的fixedMenu下拉菜单效果代码
Aug 24 #Javascript
基于jquery实现在线选座订座之影院篇
Aug 24 #Javascript
js淡入淡出的图片轮播效果代码分享
Aug 24 #Javascript
jquery地址栏链接与a标签链接匹配之特效代码总结
Aug 24 #Javascript
jquery实现鼠标滑过显示二级下拉菜单效果
Aug 24 #Javascript
You might like
弄了个检测传输的参数是否为数字的Function
2006/12/06 PHP
ThinkPHP使用Ueditor的方法详解
2016/05/20 PHP
浅析php如何实现爬取数据原理
2018/09/27 PHP
JavaScript-世界上误解最深的语言分析
2007/08/12 Javascript
ExtJS Grid使用SimpleStore、多选框的方法
2009/11/20 Javascript
jquery下将选择的checkbox的id组成字符串的方法
2010/11/28 Javascript
基于jquery和svg实现超炫酷的动画特效
2014/12/09 Javascript
jQuery trigger()方法用法介绍
2015/01/13 Javascript
深入理解JavaScript中的对象
2015/06/04 Javascript
javascript 判断两个日期之差的示例代码
2015/09/05 Javascript
vue项目中axios请求网络接口封装的示例代码
2018/12/18 Javascript
详解一个小实例理解js原型和继承
2019/04/24 Javascript
微信小程序中悬浮窗功能的实现代码
2019/08/02 Javascript
layui-select动态选中值的例子
2019/09/23 Javascript
分享Angular http interceptors 拦截器使用(推荐)
2019/11/10 Javascript
vue 解除鼠标的监听事件的方法
2019/11/13 Javascript
跟老齐学Python之dict()的操作方法
2014/09/24 Python
Python中的FTP通信模块ftplib的用法整理
2016/07/08 Python
使用python和pygame绘制繁花曲线的方法
2018/02/24 Python
解决py2exe打包后,总是多显示一个DOS黑色窗口的问题
2019/06/21 Python
Python 求数组局部最大值的实例
2019/11/26 Python
Python实现剪刀石头布小游戏(与电脑对战)
2019/12/31 Python
使用Python第三方库pygame写个贪吃蛇小游戏
2020/03/06 Python
PyQT5 实现快捷键复制表格数据的方法示例
2020/06/19 Python
Python利用Pillow(PIL)库实现验证码图片的全过程
2020/10/04 Python
python 实现波浪滤镜特效
2020/12/02 Python
表彰先进集体通报
2014/01/12 职场文书
中学生个人自我评价
2014/02/06 职场文书
有兼职工作经历的简历自我评价
2014/03/07 职场文书
学校做一个有道德的人活动方案
2014/08/23 职场文书
股东出资证明书(正规版)
2014/09/24 职场文书
2014年办公室工作总结范文
2014/11/12 职场文书
学校禁毒宣传活动总结
2015/05/08 职场文书
2016高一新生军训心得体会
2016/01/11 职场文书
使用canvas实现雪花飘动效果的示例代码
2021/03/30 HTML / CSS
Oracle 多表查询基本语法实例
2022/04/18 Oracle