基于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监听表单value的修改同步问题,跨浏览器支持
Dec 31 Javascript
Extjs学习过程中新手容易碰到的低级错误积累
Feb 11 Javascript
编写自己的jQuery插件简单实现代码
Apr 19 Javascript
JavaScript之IE的fireEvent方法详细解析
Nov 20 Javascript
使用jquery实现放大镜效果
Sep 02 Javascript
jquery 属性选择器(匹配具有指定属性的元素)
Sep 06 Javascript
Angular页面间切换及传值的4种方法
Nov 04 Javascript
图文详解Javascript中的上下文和作用域
Feb 15 Javascript
微信小程序 弹窗自定义实例代码
Mar 08 Javascript
HTML中使背景图片自适应浏览器大小实例详解
Apr 06 Javascript
Angular Renderer (渲染器)的具体使用
May 03 Javascript
详解在Javascript中进行面向切面编程
Apr 28 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实现读取一个1G的文件大小
2013/08/24 PHP
Linux下php5.4启动脚本
2014/08/03 PHP
Yii数据读取与跳转参数传递用法实例分析
2016/07/12 PHP
javascript 节点排序 2
2011/01/31 Javascript
firefox下jquery iframe刷新页面提示会导致重复之前动作
2012/12/17 Javascript
开发 Internet Explorer 右键功能表(ContextMenu)
2013/07/03 Javascript
js中arguments的用法(实例讲解)
2013/11/30 Javascript
jquery获取tagName再进行判断
2014/05/29 Javascript
javascript中HTMLDOM操作详解
2014/12/11 Javascript
JS交换变量的方法
2015/01/21 Javascript
js同源策略详解
2015/05/21 Javascript
浅谈JS原型对象和原型链
2016/03/02 Javascript
jQuery实现选项联动轮播效果【附实例】
2016/04/19 Javascript
JS针对Array的各种操作汇总
2016/11/29 Javascript
Bootstrap导航条鼠标悬停下拉菜单
2017/01/04 Javascript
bootstrap switch开关组件使用方法详解
2017/08/22 Javascript
Express系列之multer上传的使用
2017/10/27 Javascript
关于axios如何全局注册浅析
2018/01/14 Javascript
webpack4.x打包过程详解
2018/07/18 Javascript
Layui数据表格 前后端json数据接收的方法
2019/09/19 Javascript
vue选项卡切换登录方式小案例
2019/09/27 Javascript
jquery插件实现轮播图效果
2020/10/19 jQuery
原生JS实现pc端轮播图效果
2020/12/21 Javascript
解决Python传递中文参数的问题
2015/08/04 Python
Python获取暗黑破坏神3战网前1000命位玩家的英雄技能统计
2016/07/04 Python
回调函数的意义以及python实现实例
2017/06/20 Python
Python自定义线程池实现方法分析
2018/02/07 Python
Python判断两个list是否是父子集关系的实例
2018/05/04 Python
Pytorch 保存模型生成图片方式
2020/01/10 Python
使用keras实现Precise, Recall, F1-socre方式
2020/06/15 Python
浅析python函数式编程
2020/09/26 Python
django使用channels实现通信的示例
2020/10/19 Python
护士自我评价范文
2014/01/25 职场文书
个人简历自我评价
2014/02/02 职场文书
2016年敬老月活动总结
2016/04/05 职场文书
Django使用redis配置缓存的方法
2021/06/01 Redis