基于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 相关文章推荐
jQuery ui 1.7更新小结
Aug 15 Javascript
利用ajaxfileupload插件实现文件上传无刷新的具体方法
Jun 08 Javascript
批量实现面向对象的实例代码
Jul 01 Javascript
Extjs3.0 checkboxGroup 动态添加item实现思路
Aug 14 Javascript
JS去除数组重复值的五种不同方法
Sep 06 Javascript
javascript event在FF和IE的兼容传参心得(绝对好用)
Jul 10 Javascript
jquery获取一个元素下面相同子元素的个数代码
Jul 31 Javascript
JavaScript自定义函数实现查找两个字符串最长公共子串的方法
Nov 24 Javascript
微信小程序复选框实现多选一功能过程解析
Feb 14 Javascript
vue实现瀑布流组件滑动加载更多
Mar 10 Javascript
Javascript实现简易天数计算器
May 18 Javascript
JavaScript实现轮播图效果
Oct 30 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
《斗罗大陆》六翼天使武魂最强,为什么老千家不是上三宗?
2020/03/02 国漫
PHP中基本符号及使用方法
2010/03/23 PHP
PHP操作xml代码
2010/06/17 PHP
PHP三层结构(上) 简单三层结构
2010/07/04 PHP
比较简单的百度网盘文件直链PHP代码
2013/03/24 PHP
关于php 接口问题(php接口主要也就是运用curl,curl函数)
2013/07/01 PHP
深入分析PHP引用(&amp;)
2014/09/04 PHP
yii权限控制的方法(三种方法)
2015/12/28 PHP
使用Zookeeper分布式部署PHP应用程序
2019/03/15 PHP
PHP设计模式之工厂模式(Factory Pattern)的讲解
2019/03/21 PHP
js关闭当前页面(窗口)的几种方式总结
2013/03/05 Javascript
浅谈javascript:两种注释,声明变量,定义函数
2016/09/29 Javascript
利用Vue.js框架实现火车票查询系统(附源码)
2017/02/27 Javascript
详解angularJs指令的3种绑定策略
2017/04/13 Javascript
jQuery实现简单的滑动导航代码(移动端)
2017/05/22 jQuery
jQuery.Sumoselect插件实现下拉复选框效果
2017/11/09 jQuery
基于Vuex无法观察到值变化的解决方法
2018/03/01 Javascript
[55:26]DOTA2-DPC中国联赛 正赛 Aster vs LBZS BO3 第一场 2月23日
2021/03/11 DOTA
浅谈Python里面小数点精度的控制
2018/07/16 Python
详解Django-auth-ldap 配置方法
2018/12/10 Python
Python 支付整合开发包的实现
2019/01/23 Python
Python 根据数据模板创建shapefile的实现
2019/11/26 Python
Pytorch实现神经网络的分类方式
2020/01/08 Python
matlab 计算灰度图像的一阶矩,二阶矩,三阶矩实例
2020/04/22 Python
matplotlib对象拾取事件处理的实现
2021/01/14 Python
html5移动端价格输入键盘的实现
2019/09/16 HTML / CSS
英国探险旅游专家:Explore
2018/12/20 全球购物
高校十八大报告感想
2014/01/27 职场文书
教师暑期培训感言
2014/08/15 职场文书
最美护士演讲稿
2014/08/27 职场文书
公务员政审个人总结
2015/02/12 职场文书
餐饮服务食品安全承诺书
2015/04/29 职场文书
建党伟业观后感
2015/06/01 职场文书
2015年校本培训工作总结
2015/07/24 职场文书
python3 删除所有自定义变量的操作
2021/04/08 Python
Django开发RESTful API实现增删改查(入门级)
2021/05/10 Python