Tobii
An accessible, open-source lightbox with no dependencies.
Table of contents
- Features
- Get Tobii
- Usage
- Media types
- Grouping
- Options
- API
- Browser support
- To do
- Contributing
- License
Features
- No dependencies
- Accessible:
- ARIA roles
- Keyboard navigation:
Prev
/Next
Keys: Navigate through slidesESCAPE
Key: Close TobiiTAB
Key: Focus elements within Tobii, not outside
- User preference media features:
prefers-reduced-motion
media query
- When Tobii opens, focus is set to the first focusable element in Tobii
- When Tobii closes, focus returns to what was in focus before Tobii opened
- Touch & Mouse drag support:
- Drag/ Swipe horizontal to navigate through slides
- Drag/ Swipe vertical to close Tobii
- Responsive
- Support iframes
- Support inline HTML
Get Tobii
Download
CSS: css/tobii.min.css
minified, or css/Totii.css
un-minified
JavaScript: js/tobii.min.js
minified, or js/tobii.js
un-minified
Package managers
Tobii is also available on npm.
npm install tobii --save
Usage
You can install Tobii by linking the .css
and .js
files to your html file. The HTML code may look like this:
Your page title <!-- CSS --> <!-- Your HTML content --> <!-- JS -->
Initialize the script by running:
const tobii =
Media types
Image
The standard way of using Tobii is a linked thumbnail image with the class name lightbox
to a larger image:
Instead of a thumbnail, you can also refer to a larger image with a textlink:
Open image
Inline HTML
For inline HTML, create an element with a unique ID:
<!-- Your HTML content -->
Then create a link with the class name lightbox
and a href
attribute that matches the ID of the element:
Open HTML content
or a button with the class name lightbox
and a data-target
attribute that matches the ID of the element:
Open HTML content
In both ways, the attribute data-type
with the value html
must be added.
Iframe
For an iframe, create a link with the class name lightbox
:
Open Wikipedia
or a button with the class name lightbox
and a data-target
attribute:
Open Wikipedia
In both ways, the attribute data-type
with the value iframe
must be added.
Optional attributes
data-height
set the height anddata-width
the width of the iframe.
YouTube
For an YouTube video, create a link with the class name lightbox
and a data-id
attribute with the YouTube video ID:
Open YouTube video
or a button with the class name lightbox
and a data-id
attribute with the YouTube video ID:
Open YouTube video
In both ways, the attribute data-type
with the value youtube
must be added.
Optional attributes
data-controls
indicates whether the video player controls are displayed:0
do not display and1
display controls in the player.data-height
set the height anddata-width
the width of the player. I recommend using an external library for responsive iframes.
Grouping
If you have a group of related types that you would like to combine into a set, add the data-group
attribute:
// ... // ...
Options
You can pass an object with custom options as an argument.
const tobii = captions: false
The following options are available:
Property | Type | Default | Description |
---|---|---|---|
selector | string | ".lightbox" | All elements with this class triggers Tobii. |
captions | bool | true | Display captions, if available. |
captionsSelector | "self", "img" | "img" | Set the element where the caption is. Set it to "self" for the a tag itself. |
captionAttribute | string | "alt" | Get the caption from given attribute. |
nav | bool, "auto" | "auto" | Display navigation buttons. "auto" hides buttons on touch-enabled devices. |
navText | string | ["inline svg", "inline svg"] | Text or HTML for the navigation buttons. |
navLabel | string | ["Previous", "Next"] | ARIA label for screen readers. |
close | bool | true | Display close button. |
closeText | string | "inline svg" | Text or HTML for the close button. |
closeLabel | string | "Close" | ARIA label for screen readers. |
loadingIndicatorLabel | string | "Image loading" | ARIA label for screen readers. |
counter | bool | true | Display current image index. |
keyboard | bool | true | Allow keyboard navigation. |
zoom | bool | true | Display zoom icon. |
zoomText | string | "inline svg" | Text or HTML for the zoom icon. |
docClose | bool | true | Click outside to close Tobii. |
swipeClose | bool | true | Swipe up to close Tobii. |
hideScrollbar | bool | true | Hide browser scrollbars if Tobii is displayed. |
draggable | bool | true | Use dragging and touch swiping. |
threshold | number | 100 | Touch and mouse dragging threshold (in px). |
autoplayVideo | bool | false | Videos will automatically start playing as soon as they can do so without stopping to finish loading the data. |
API
Function | Description |
---|---|
open(index, callback) |
Open Tobii. Optional with a specific slide with index (number). Optional callback (function) as a second argument. |
next(callback) |
Show the next slide. Optional callback (function). |
prev(callback) |
Show the previous slide. Optional callback (function). |
close(callback) |
Close Tobii. Optional callback (function). |
add(element, callback) |
Add an element (DOM element) (example on CodePen). Optional callback (function) as a second argument (example on CodePen). |
remove(element, callback) |
Remove an element (DOM element). Optional callback (function) as a second argument. |
isOpen() |
Check if Tobii is open. |
currentSlide() |
Return the current slide index. |
selectGroup() |
Select a specific group. |
currentGroup() |
Return the current group. |
destroy() |
Destroy Tobii. Optional callback (function). |
Browser support
Tobii has been tested in the following browsers (all the latest versions):
- Chrome
- Firefox
- Internet Explorer
- Edge
- Safari
To do
- Support for
srcset
andpicture
Contributing
- Open an issue or a pull request to suggest changes or additions
- Spread the word
License
Tobii is available under the MIT license. See the LICENSE file for more info.