基于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 相关文章推荐
超清晰的document对象详解
Feb 27 Javascript
服务器安全设置的几个注册表设置
Jul 28 Javascript
jquery选择器简述
Aug 31 Javascript
js命名空间写法示例
Dec 18 Javascript
JavaScript判断是否是微信浏览器
Jun 13 Javascript
用原生JS对AJAX做简单封装的实例代码
Jul 13 Javascript
深入理解jQuery layui分页控件的使用
Aug 17 Javascript
基于BootStrap与jQuery.validate实现表单提交校验功能
Dec 22 Javascript
用Vue-cli搭建的项目中引入css报错的原因分析
Jul 20 Javascript
layui前端时间戳转化实例
Nov 15 Javascript
VUE实时监听元素距离顶部高度的操作
Jul 29 Javascript
如何使用jQuery操作Cookies方法解析
Sep 08 jQuery
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
用PHP连接Oracle数据库
2006/10/09 PHP
php 类中的常量、静态属性、非静态属性的区别
2017/04/09 PHP
PHP substr()函数参数解释及用法讲解
2017/11/23 PHP
Yii2框架数据验证操作实例详解
2018/05/02 PHP
深入解析PHP底层机制及相关原理
2020/12/11 PHP
javascript 面向对象全新理练之数据的封装
2009/12/03 Javascript
JS中eval函数的使用示例
2013/07/21 Javascript
设置checkbox为只读(readOnly)的两种方式
2013/10/11 Javascript
JavaScript获取网页中第一个图片id的方法
2015/04/03 Javascript
JS用斜率判断鼠标进入DIV四个方向的方法
2016/11/07 Javascript
微信小程序小组件 基于Canvas实现直播点赞气泡效果
2020/05/29 Javascript
node中koa中间件机制详解
2017/08/22 Javascript
Vue中自定义全局组件的实现方法
2017/12/08 Javascript
移动web开发之touch事件实例详解
2018/01/17 Javascript
vue里面使用mui的弹出日期选择插件实例
2018/09/16 Javascript
详解js访问对象的属性和方法
2018/10/25 Javascript
Vue实现移动端左右滑动效果的方法
2018/11/27 Javascript
js实现窗口全屏示例详解
2019/09/17 Javascript
原生js实现二级联动菜单
2019/11/27 Javascript
Python Tkinter基础控件用法
2014/09/03 Python
python+mysql实现简单的web程序
2014/09/11 Python
Python常见字符串操作函数小结【split()、join()、strip()】
2018/02/02 Python
python3+PyQt5图形项的自定义和交互 python3实现page Designer应用程序
2020/07/20 Python
用python编写第一个IDA插件的实例
2018/05/29 Python
python数据挖掘需要学的内容
2019/06/23 Python
Python Sympy计算梯度、散度和旋度的实例
2019/12/06 Python
Python socket服务常用操作代码实例
2020/06/22 Python
如何通过Python实现RabbitMQ延迟队列
2020/11/28 Python
CSS3实现各种图形的示例代码
2016/10/19 HTML / CSS
财务会计专业应届毕业生求职信
2013/10/18 职场文书
公关关系专员的自我评价分享
2013/11/20 职场文书
环保倡议书怎么写
2014/05/16 职场文书
优秀工会工作者事迹材料
2014/06/02 职场文书
体育运动口号
2014/06/09 职场文书
无刑事犯罪记录证明
2014/09/18 职场文书
物业保洁员岗位职责
2015/02/13 职场文书