基于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 相关文章推荐
{}与function(){}选用空对象{}来存放keyValue
May 23 Javascript
javascript学习笔记(十四) window对象使用介绍
Jun 20 Javascript
javascript(js)的小数点乘法除法问题详解
Mar 07 Javascript
Jquery对数组的操作技巧整理
Mar 25 Javascript
JavaScript中合并数组的N种方法
Sep 16 Javascript
Javascript基础教程之变量
Jan 18 Javascript
Node.js事件循环(Event Loop)和线程池详解
Jan 28 Javascript
javascript cookie用法基础教程(概念,设置,读取及删除)
Sep 20 Javascript
微信小程序 LOL 英雄介绍开发实例
Sep 30 Javascript
jQuery Validation Engine验证控件调用外部函数验证的方法
Jan 18 Javascript
鼠标经过出现气泡框的简单实例
Mar 17 Javascript
JavaScript实现联动菜单特效
Jan 07 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
PHP加速 eAccelerator配置和使用指南
2009/06/05 PHP
详解WordPress中过滤链接与过滤SQL语句的方法
2015/12/18 PHP
JavaScript实现删除电脑的关机键
2016/07/26 PHP
$.getJSON在IE下失效的原因分析及解决方法
2013/06/16 Javascript
JS判定是否原生方法
2013/07/22 Javascript
浅谈JavaScript Math和Number对象
2015/01/26 Javascript
JavaScript实现跨浏览器的添加及删除事件绑定函数实例
2015/08/04 Javascript
JavaScript类型系统之Object详解
2016/01/07 Javascript
你所未知的3种Node.js代码优化方式
2016/02/25 Javascript
跨域请求的完美解决方法(JSONP, CORS)
2016/06/12 Javascript
js 获取站点应用名的简单实例
2016/08/18 Javascript
在web中js实现类似excel的表格控件
2016/09/01 Javascript
js与jquery分别实现tab标签页功能的方法
2016/11/18 Javascript
JS设计模式之惰性模式(二)
2017/09/29 Javascript
Vue路由history模式解决404问题的几种方法
2018/09/29 Javascript
关于AngularJS中ng-repeat不更新视图的解决方法
2018/09/30 Javascript
详解Vue webapp项目通过HBulider打包原生APP(vue+webpack+HBulider)
2019/02/02 Javascript
简单实现vue中的依赖收集与响应的方法
2019/02/18 Javascript
vue动态绑定class的几种常用方式小结
2019/05/21 Javascript
详解如何修改 node_modules 里的文件
2020/05/22 Javascript
vue自定义树状结构图的实现方法
2020/10/18 Javascript
python连接打印机实现打印文档、图片、pdf文件等功能
2020/02/07 Python
使用scrapy ImagesPipeline爬取图片资源的示例代码
2020/09/28 Python
Python爬虫爬取有道实现翻译功能
2020/11/27 Python
用gpu训练好的神经网络,用tensorflow-cpu跑出错的原因及解决方案
2021/03/03 Python
通过Canvas及File API缩放并上传图片完整示例
2013/08/08 HTML / CSS
JavaScript+Canvas实现自定义画板的示例代码
2019/05/13 HTML / CSS
Melissa鞋英国官方网站:Nonnon
2019/05/01 全球购物
LACOSTE波兰官网:Polo衫、服装和鞋类
2020/09/29 全球购物
邻里守望志愿服务活动方案
2014/08/15 职场文书
医德医风自我评价
2014/09/19 职场文书
2014年高三班主任工作总结
2014/12/05 职场文书
离职感谢信怎么写
2015/01/22 职场文书
应聘教师求职信范文
2015/03/20 职场文书
读《茶花女》有感:山茶花的盛开与凋零
2020/01/17 职场文书
Sql Server之数据类型详解
2022/02/28 SQL Server