DataTables custom pagination plug-in example

Preamble

The two default pagination styles that DataTables comes with are great for basic tables, but you might which to add extra customisation or a bit of 'glitz'. This plug-in will scroll the table in an animated style.

Live example

Rendering engine Browser Platform(s) Engine version CSS grade
Trident Internet Explorer 4.0 Win 95+ 4 X
Trident Internet Explorer 5.0 Win 95+ 5 C
Trident Internet Explorer 5.5 Win 95+ 5.5 A
Trident Internet Explorer 6 Win 98+ 6 A
Trident Internet Explorer 7 Win XP SP2+ 7 A
Trident AOL browser (AOL desktop) Win XP 6 A
Gecko Firefox 1.0 Win 98+ / OSX.2+ 1.7 A
Gecko Firefox 1.5 Win 98+ / OSX.2+ 1.8 A
Gecko Firefox 2.0 Win 98+ / OSX.2+ 1.8 A
Gecko Firefox 3.0 Win 2k+ / OSX.3+ 1.9 A
Gecko Camino 1.0 OSX.2+ 1.8 A
Gecko Camino 1.5 OSX.3+ 1.8 A
Gecko Netscape 7.2 Win 95+ / Mac OS 8.6-9.2 1.7 A
Gecko Netscape Browser 8 Win 98SE+ 1.7 A
Gecko Netscape Navigator 9 Win 98+ / OSX.2+ 1.8 A
Gecko Mozilla 1.0 Win 95+ / OSX.1+ 1 A
Gecko Mozilla 1.1 Win 95+ / OSX.1+ 1.1 A
Gecko Mozilla 1.2 Win 95+ / OSX.1+ 1.2 A
Gecko Mozilla 1.3 Win 95+ / OSX.1+ 1.3 A
Gecko Mozilla 1.4 Win 95+ / OSX.1+ 1.4 A
Gecko Mozilla 1.5 Win 95+ / OSX.1+ 1.5 A
Gecko Mozilla 1.6 Win 95+ / OSX.1+ 1.6 A
Gecko Mozilla 1.7 Win 98+ / OSX.1+ 1.7 A
Gecko Mozilla 1.8 Win 98+ / OSX.1+ 1.8 A
Gecko Seamonkey 1.1 Win 98+ / OSX.2+ 1.8 A
Gecko Epiphany 2.20 Gnome 1.8 A
Webkit Safari 1.2 OSX.3 125.5 A
Webkit Safari 1.3 OSX.3 312.8 A
Webkit Safari 2.0 OSX.4+ 419.3 A
Webkit Safari 3.0 OSX.4+ 522.1 A
Webkit OmniWeb 5.5 OSX.4+ 420 A
Webkit iPod Touch / iPhone iPod 420.1 A
Webkit S60 S60 413 A
Presto Opera 7.0 Win 95+ / OSX.1+ - A
Presto Opera 7.5 Win 95+ / OSX.2+ - A
Presto Opera 8.0 Win 95+ / OSX.2+ - A
Presto Opera 8.5 Win 95+ / OSX.2+ - A
Presto Opera 9.0 Win 95+ / OSX.3+ - A
Presto Opera 9.2 Win 88+ / OSX.3+ - A
Presto Opera 9.5 Win 88+ / OSX.3+ - A
Presto Opera for Wii Wii - A
Presto Nokia N800 N800 - A
Presto Nintendo DS browser Nintendo DS 8.5 C/A1
KHTML Konqureror 3.1 KDE 3.1 3.1 C
KHTML Konqureror 3.3 KDE 3.3 3.3 A
KHTML Konqureror 3.5 KDE 3.5 3.5 A
Tasman Internet Explorer 4.5 Mac OS 8-9 - X
Tasman Internet Explorer 5.1 Mac OS 7.6-9 1 C
Tasman Internet Explorer 5.2 Mac OS 8-X 1 C
Misc NetFront 3.1 Embedded devices - C
Misc NetFront 3.4 Embedded devices - A
Misc Dillo 0.8 Embedded devices - X
Misc Links Text only - X
Misc Lynx Text only - X
Misc IE Mobile Windows Mobile 6 - C
Misc PSP browser PSP - C
Other browsers All others - - U
Rendering engine Browser Platform(s) Engine version CSS grade

Initialisation code

/* Time between each scrolling frame */

$.fn.dataTableExt.oPagination.iTweenTime = 100;



$.fn.dataTableExt.oPagination.scrolling = {

	"fnInit": function ( oSettings, nPaging, fnCallbackDraw )

	{

		/* Store the next and previous elements in the oSettings object as they can be very

		 * usful for automation - particularly testing

		 */

		var nPrevious = document.createElement( 'div' );

		var nNext = document.createElement( 'div' );

		

		if ( oSettings.sTableId !== '' )

		{

			nPaging.setAttribute( 'id', oSettings.sTableId+'_paginate' );

			nPrevious.setAttribute( 'id', oSettings.sTableId+'_previous' );

			nNext.setAttribute( 'id', oSettings.sTableId+'_next' );

		}

		

		nPrevious.className = "paginate_disabled_previous";

		nNext.className = "paginate_disabled_next";

		

		nPrevious.title = oSettings.oLanguage.oPaginate.sPrevious;

		nNext.title = oSettings.oLanguage.oPaginate.sNext;

		

		nPaging.appendChild( nPrevious );

		nPaging.appendChild( nNext );

		

		$(nPrevious).click( function() {

			/* Disallow paging event during a current paging event */

			if ( typeof oSettings.iPagingLoopStart != 'undefined' && oSettings.iPagingLoopStart != -1 )

			{

				return;

			}

			

			oSettings.iPagingLoopStart = oSettings._iDisplayStart;

			oSettings.iPagingEnd = oSettings._iDisplayStart - oSettings._iDisplayLength;

			

			/* Correct for underrun */

			if ( oSettings.iPagingEnd < 0 )

			{

			  oSettings.iPagingEnd = 0;

			}

			

			var iTween = $.fn.dataTableExt.oPagination.iTweenTime;

			var innerLoop = function () {

				if ( oSettings.iPagingLoopStart > oSettings.iPagingEnd ) {

					oSettings.iPagingLoopStart--;

					oSettings._iDisplayStart = oSettings.iPagingLoopStart;

					fnCallbackDraw( oSettings );

					setTimeout( function() { innerLoop(); }, iTween );

				} else {

					oSettings.iPagingLoopStart = -1;

				}

			};

			innerLoop();

		} );

		

		$(nNext).click( function() {

			/* Disallow paging event during a current paging event */

			if ( typeof oSettings.iPagingLoopStart != 'undefined' && oSettings.iPagingLoopStart != -1 )

			{

				return;

			}

			

			oSettings.iPagingLoopStart = oSettings._iDisplayStart;

			

			/* Make sure we are not over running the display array */

			if ( oSettings._iDisplayStart + oSettings._iDisplayLength < oSettings.fnRecordsDisplay() )

			{

				oSettings.iPagingEnd = oSettings._iDisplayStart + oSettings._iDisplayLength;

			}

			

			var iTween = $.fn.dataTableExt.oPagination.iTweenTime;

			var innerLoop = function () {

				if ( oSettings.iPagingLoopStart < oSettings.iPagingEnd ) {

					oSettings.iPagingLoopStart++;

					oSettings._iDisplayStart = oSettings.iPagingLoopStart;

					fnCallbackDraw( oSettings );

					setTimeout( function() { innerLoop(); }, iTween );

				} else {

					oSettings.iPagingLoopStart = -1;

				}

			};

			innerLoop();

		} );

		

		/* Take the brutal approach to cancelling text selection */

		$(nPrevious).bind( 'selectstart', function () { return false; } );

		$(nNext).bind( 'selectstart', function () { return false; } );

	},

	

	"fnUpdate": function ( oSettings, fnCallbackDraw )

	{

		if ( !oSettings.aanFeatures.p )

		{

			return;

		}

		

		/* Loop over each instance of the pager */

		var an = oSettings.aanFeatures.p;

		for ( var i=0, iLen=an.length ; i<iLen ; i++ )

		{

			if ( an[i].childNodes.length !== 0 )

			{

				an[i].childNodes[0].className = 

					( oSettings._iDisplayStart === 0 ) ? 

					oSettings.oClasses.sPagePrevDisabled : oSettings.oClasses.sPagePrevEnabled;

				

				an[i].childNodes[1].className = 

					( oSettings.fnDisplayEnd() == oSettings.fnRecordsDisplay() ) ? 

					oSettings.oClasses.sPageNextDisabled : oSettings.oClasses.sPageNextEnabled;

			}

		}

	}

}



$(document).ready(function() {

	$('#example').dataTable( {

		"sPaginationType": "scrolling"

	} );

} );

Other examples