基于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 相关文章推荐
JS延迟加载(setTimeout) JS最后加载
Jul 15 Javascript
基于jquery的模态div层弹出效果
Aug 21 Javascript
再探JavaScript作用域
Sep 24 Javascript
jQuery 遍历函数详解
Jul 05 Javascript
jQuery实现图片渐入渐出切换展示效果
Aug 15 Javascript
AngularJS中使用HTML5手机摄像头拍照
Feb 22 Javascript
利用css+原生js制作简单的钟表
Apr 07 Javascript
vue.js初学入门教程(1)
Nov 03 Javascript
使用jquery判断一个元素是否含有一个指定的类(class)实例
Feb 12 Javascript
Vue Components 数字键盘的实现
Sep 18 Javascript
Vue项目中Api的组织和返回数据处理的操作
Nov 04 Javascript
ElementUI实现el-form表单重置功能按钮
Jul 21 Javascript
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
WML,Apache,和 PHP 的介绍
2006/10/09 PHP
php实现压缩多个CSS与JS文件的方法
2014/11/11 PHP
jquery给图片添加鼠标经过时的边框效果
2013/11/12 Javascript
浅析JavaScript中的隐式类型转换
2013/12/05 Javascript
Javascript实现飞动广告效果的方法
2015/05/25 Javascript
jQuery实现的简单排序功能示例【冒泡排序】
2017/01/13 Javascript
微信小程序之picker日期和时间选择器
2017/02/09 Javascript
Angular 2父子组件数据传递之@Input和@Output详解 (上)
2017/07/05 Javascript
javascript如何用递归写一个简单的树形结构示例
2017/09/06 Javascript
微信小程序实现点击文字页面跳转功能【附源码下载】
2017/12/12 Javascript
简易Vue评论框架的实现(父组件的实现)
2018/01/08 Javascript
vue 微信授权登录解决方案
2018/04/10 Javascript
vue中element 上传功能的实现思路
2018/07/06 Javascript
小程序实现五星点评效果
2018/11/03 Javascript
Vue+Vant 图片上传加显示的案例
2020/11/03 Javascript
Python Web框架Tornado运行和部署
2020/10/19 Python
Python+MongoDB自增键值的简单实现
2016/11/04 Python
Python爬取十篇新闻统计TF-IDF
2018/01/03 Python
Numpy 将二维图像矩阵转换为一维向量的方法
2018/06/05 Python
Python走楼梯问题解决方法示例
2018/07/25 Python
Python初学者常见错误详解
2019/07/02 Python
500行代码使用python写个微信小游戏飞机大战游戏
2019/10/16 Python
python将数组n等分的实例
2019/12/02 Python
什么是python的列表推导式
2020/05/26 Python
CSS3中使用RGBA设置透明度的示例
2015/08/04 HTML / CSS
简约控的天堂:The Undone
2016/12/21 全球购物
Pam & Gela官网:美国性感前卫女装品牌
2018/07/19 全球购物
平面网站制作专科生的自我评价分享
2013/12/11 职场文书
致跳高运动员广播稿
2014/01/13 职场文书
安全生产目标责任书
2014/04/14 职场文书
政府领导干部个人对照检查材料思想汇报
2014/09/24 职场文书
出国签证在职证明范本
2014/11/24 职场文书
音乐教师个人总结
2015/02/06 职场文书
中班上学期个人总结
2015/02/12 职场文书
初婚初育证明范本
2015/06/18 职场文书
python和Appium的移动端多设备自动化测试框架
2022/04/26 Python