Full-featured Seating Chart Plugin With jQuery - Seat Charts
File Size: | 26.9 KB |
---|---|
Views Total: | 46239 |
Last Update: | |
Publish Date: | |
Official Website: | Go to website |
License: | MIT |

Seat Charts is a powerful jQuery plugin which helps you render an fully accessible and configurable seating chart / seat map in the webpage.
Features:
- WAI-ARIA compliant.
- Custom seats, maps and legends.
- Booking details.
- Lots of API.
How to use it:
1. Add the jQuery Seat Charts plugin's JavaScript and stylesheet into your jQuery page.
<link rel="stylesheet" href="jquery.seat-charts.css"> <script src="//code.jquery.com/jquery.min.js"></script> <script src="jquery.seat-charts.js"></script>
2. Create the placeholder elements for the seat map.
<div id="seat-map"> <div class="front-indicator">Front</div> </div>
3. Create the placeholder elements for the booking details.
<div class="booking-details"> <h2>Booking Details</h2> <h3> Selected Seats (<span id="counter">0</span>):</h3> <ul id="selected-seats"> </ul> Total: <b>$<span id="total">0</span></b> <button class="checkout-button">Checkout »</button> <div id="legend"></div> </div>
4. Setup the plugin as follows:
var firstSeatLabel = 1; $(document).ready(function() { var $cart = $('#selected-seats'), $counter = $('#counter'), $total = $('#total'), sc = $('#seat-map').seatCharts({ map: [ 'ff_ff', 'ff_ff', 'ee_ee', 'ee_ee', 'ee___', 'ee_ee', 'ee_ee', 'ee_ee', 'eeeee', ], seats: { f: { price : 100, classes : 'first-class', //your custom CSS class category: 'First Class' }, e: { price : 40, classes : 'economy-class', //your custom CSS class category: 'Economy Class' } }, naming : { top : false, getLabel : function (character, row, column) { return firstSeatLabel++; }, }, legend : { node : $('#legend'), items : [ [ 'f', 'available', 'First Class' ], [ 'e', 'available', 'Economy Class'], [ 'f', 'unavailable', 'Already Booked'] ] }, click: function () { if (this.status() == 'available') { //let's create a new <li> which we'll add to the cart items $('<li>'+this.data().category+' Seat # '+this.settings.label+': <b>$'+this.data().price+'</b> <a href="#" class="cancel-cart-item">[cancel]</a></li>') .attr('id', 'cart-item-'+this.settings.id) .data('seatId', this.settings.id) .appendTo($cart); /* * Lets update the counter and total * * .find function will not find the current seat, because it will change its stauts only after return * 'selected'. This is why we have to add 1 to the length and the current seat price to the total. */ $counter.text(sc.find('selected').length+1); $total.text(recalculateTotal(sc)+this.data().price); return 'selected'; } else if (this.status() == 'selected') { //update the counter $counter.text(sc.find('selected').length-1); //and total $total.text(recalculateTotal(sc)-this.data().price); //remove the item from our cart $('#cart-item-'+this.settings.id).remove(); //seat has been vacated return 'available'; } else if (this.status() == 'unavailable') { //seat has been already booked return 'unavailable'; } else { return this.style(); } } }); //this will handle "[cancel]" link clicks $('#selected-seats').on('click', '.cancel-cart-item', function () { //let's just trigger Click event on the appropriate seat, so we don't have to repeat the logic here sc.get($(this).parents('li:first').data('seatId')).click(); }); //let's pretend some seats have already been booked sc.get(['1_2', '4_1', '7_1', '7_2']).status('unavailable'); }); function recalculateTotal(sc) { var total = 0; //basically find every selected seat and sum its price sc.find('selected').each(function () { total += this.data().price; }); return total; }
4. All default options.
// requires jQuery UI animate : false, // specify your own column and row labels as well as functions for generating seat ids and labels naming : { top : true, left : true, getId : function(character, row, column) { return row + '_' + column; }, getLabel : function (character, row, column) { return column; } }, // custom legend legend : { node : null, items : [] }, // click function click : function() { if (this.status() == 'available') { return 'selected'; } else if (this.status() == 'selected') { return 'available'; } else { return this.style(); } }, // focus function focus : function() { if (this.status() == 'available') { return 'focused'; } else { return this.style(); } }, // blur function blur : function() { return this.status(); }, // seat map definition seats : {}
5. API methods.
var sc = $('#sc-container').seatCharts({ //... }); //get 2_3 seat sc.get('2_3'); //get 2_3 and 2_4 seats sc.get(['2_3', '2_4']); //find all a seats sc.find('a'); //find all unavailable seats sc.find('unavailable'); //find all available a seats sc.find('a.available'); //find all seats in the first row sc.find(/^1_[0-9]+/); //find available seats within specified seat ids sc.get(['1_2', '1_3', '1_4']).find('available'); //set status for one seat sc.status('2_15', 'unvailable'); //set status for two seats sc.status(['2_15', '2_10'], 'unvailable'); //make all unvailable seats available sc.find('unavailable').status('available'); //make all unavailable seats disappear sc.find('unavailable').node().fadeOut('fast'); //with callback sc.find('a.unavailable').each(function(seatId) { console.log(this.data()); //display seat data }); //If status argument is set, it will be used as a new seat status, otherwise current status will be returned. sc.status( [status] ) //Returns a reference to jQuery element. sc.node( ) //Returns a reference to seat data. sc.data( ) //Returns seat character. sc.char( )
Change log:
2016-12-29
- JS update
This awesome jQuery plugin is developed by mateuszmarkowski. For more Advanced Usages, please check the demo page or visit the official website.