A small and accessible jQuery plugin for adding sticky headers to large data tables.
Demo
https://codepen.io/simonsmith/full/yoQyKa/
Features
- Supports multiple tables on one page
- Uses
position: fixed
that allows smooth scrolling and a wide range of browser
support - Screenreader support
- Minimal DOM updates in scroll event
Installation
npm
It's recommended to require
/import
the plugin as part of an existing webpack or browserify setup:
npm install jquery jquery-sticky-table-header --save
const $ = require('jquery');
require('jquery-sticky-table-header');
$('.table-container').stickyTableHeader();
Relies on jQuery as a peerDependency
so ensure it is installed in your
application.
Manual
Clone the repository and run npm install && npm run build
. This will generate
a UMD version of the plugin in ./build
that can be dropped into a project
however you want.
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script src="jquery.stickyTableHeader.js"></script>
Usage
There are a couple of HTML requirements for the plugin to function correctly:
- The table must be inside a containing element
- There must be a
thead
element - There must be a
tbody
element
Example
<div class="table-container">
<table>
<thead>
</thead>
<tbody>
</tbody>
</table>
</div>
$('.table-container').stickyTableHeader();
Options
-
outsideViewportOnly - (boolean) Only run the plugin if the table is
larger than the viewport default true
-
scrollThrottle - (number) Maximum number of times the scroll handler
can be called over time in milliseconds default 50
-
zIndex - (number) Added to the header to control stacking default 2
-
css (object) Classes applied to the HTML structure
- header (string) - Added to the header that scrolls with the table default
StickyTableHeader
- scrolling (string) - Added to the header when it is scrolling with the viewport default
is-scrolling
Development
- Clone the repository
npm install
npm start
Access the demo at http://localhost:3001/example