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秒 

最后,我整理了源码并提供下载,欢迎下载源码:点击这里下载

 
时间: 2024-10-10 11:15:44

jQuery在线选座订座(高铁版)的相关文章

jQuery在线选座订座(影院篇)

原文:jQuery在线选座订座(影院篇) 我们在线购票时(如电影票.车票等)可以自己选座.开发者会在页面上列出座次席位,用户可以一目了然的看到可以选择的座位及支付.本文以电影院购票为例,为您展示如何选座.处理选座数据等. 在这里,我给大家介绍一款基于jQuery的在线选座插件:jQuery Seat Charts,它支持自定义座位类型和价格,支持自定义样式,支持设置不可选的座位,也支持键盘控制座位. 点击这里查看演示 HTML 我们假设进入电影<星际穿越>的选座页面,页面布局请看上面的大图,页

美国为什么放弃中国高铁?

前不久,美国铁路公司西部快线,单方面终止了与中铁国际合作的高铁项目,理由是,美国州政府要求在美国境内使用的高铁,必须是在美国境内生产的,而且抱怨中铁国际在推进项目进展的过程中,表现出的驾驭能力相对不足. 针对该言论,中铁国际深表遗憾,并已进行了严正交涉,措辞之强烈前所未有,斥责美方的行为是:错误和不负责任的.隔着屏幕,只消看一眼这两个词语,就感觉到中铁国际无比愤怒,好像一挂点燃的鞭炮,要把周边世界炸得烟火一片.其实,中铁国际在处理这件事情时,远没有情绪失控,只是我等小人物肆意渲染罢了,我们无非是

释放行业价值,互联网+刮向高铁行业

近年来,我国的高铁行业可谓取得了一个突飞猛进的发展.根据人民日报最新报道称:日前郑徐高铁正式开通运营,标志着中国高铁运营里程突破了2万公里.而根据最新发布的<中长期铁路网规划>,到2025年,中国的高铁运营里程将达到3.8万公里左右,比2015年底翻一番. 高铁的经济贡献能量巨大,但也面临着些许问题 毫无疑问,高铁行业的快速发展对于整个国内的经济和社会发展具有巨大的促进作用. 首先,高铁的成熟运营能够大幅提升运输效率,降低运输时间,在加快人员.物资等资源的流动方面,具有极大的促进作用.过去从北

高铁在高速运行时的电力是如何提供的?

高铁在高速运行时的电力是如何提供的? 铁路机车是个庞大的家族,高铁只是这个大家庭的一个新成员,如果要连篇累牍赘述其他车辆,恐怕这个答案是写不下的,故本文针对高速铁路进行讨论. 一. 高铁列车的动力来源是交流电还是直流电? 各国高铁基本采用交流电作为高铁列车的牵引网络的电流制式. (萌萌的意呆立除外.在高铁电流制式这个问题上,全世界都摸着意呆立过河) 二. 高速列车如何获取电能作为动力? (从电路角度来看,高铁采取AT(自耦变压器)供电方式. ) 高铁能够跑起来,依靠的是牵引供电系统给高速列车提供

刘志军的高铁遗产 ——看看日本高铁是怎么建起来的

加藤嘉一 我初到中国的时候,刘志军刚刚当上中国铁道部长,读后感“刘志军的高铁遗产 ——看看日本高铁是怎么建起来的 ”.八年来,我无数次乘坐中国火车到各地旅行,既坐过又脏又乱的普通列车,也坐过现代化的“和谐号”,将来肯定还会坐世界领先的京沪高铁.不过,中国高铁之父刘志军却没有机会以铁道部长的身份看到京沪高铁的开通了. 根据报道,他因在铁路建设中的“严重违纪行为”而落马下台,有永远出不来的可能.一直对中国高铁寄予高度关注,也确实没少加以表扬的世界媒体,在这个爆炸性的消息面前多少有些震惊.不过,作为新

一款实用的火车票订票APP--高铁管家

在不断的高铁旅行中,我一直以来使用的是12306网站进行订票,但是12306网站订票交互性差,等待时间长,用户体验让人觉得崩溃,于是我不停的寻找着替代12306的产品,偶然间找到了--高铁管家这款APP.这款APP深深的吸引了我,解决了我一直以来订票难的问题. 首先高铁管家简洁明了的首页一下吸引了我的眼球. 接着可以根据出发站和作为类型来筛选希望的车次,还可以根据出发时间.旅行耗时.到时时间进行从小到大排序. 这款APP最有特点的功能就是下面展示的抢票和预订功能. 抢票功能主要有两个玩法,第一个

SWF在线绘本批量制作高质量PDF的新方法(重点在批量制作)

SWF在线绘本批量制作高质量PDF的新方法(重点在批量制作) 2012-12-21  未来决定... http://www.ebama.net/thread-107643-1-1.html 含笑 发表于 2012-12-10 13:51 请教楼主,如何进行压制?是用什么软件吗? 虚拟装载DVD后DVDdcrypter分割提取VOBdgindex制作工程文件和分轨Megui+avs压制mmg封包 具体的教程和软件,TLF小组出过一个打包文件,全在里面了 字幕的话各种情况提取办法不同,图片字幕用su

京沪高铁上火车位置的实时监视模拟网站的开发

因为本人从小就对地理很痴迷,经常看地图,而且对火车有一种很特殊的感觉.以前吧,从影视作品中也经常看到在一个指挥室里面,工作人员可以时刻的监视火车运行的状态和位置,所以呢,我也打算做一个仅仅针对京沪高铁线路的模拟监视系统~(之所以是模拟呢,就是火车不可能实时的给我们返回位置数据吧,我们实时展示的火车的位置其实是基于当前的时间和火车的离开上一个站点的时间以及到达下一站点的时间计算出来的) 当然啦,我主要运用的就是国外的一大神写得一个简单的jquery库transit.js(连接地址:http://o

从高铁上定外卖看,未来创业公司还能整出啥花样

经济大环境的不景气,波及的不仅仅是线下实体行业,互联网行业更是感受到了凛冽寒风.尤其是还处于萌芽.发展阶段的互联网创业公司,更是首当其冲.热钱减少.融资难度高.创业项目少.门槛高--这些都成为创业公司正在面对的问题.其实呢,说到底,创业公司能不能真正成长起来,关键就在于是否能有让投资者感兴趣的"好故事". 比如乐视当年故事讲得好,就吸引了那么多投资:摩拜和ofo故事讲得好,数亿美元融资轻松到手--而近段时间,饿了么也在多趟高铁上推出预定和即时订两种订餐服务.乘坐高铁的旅客不用离开座位,