Just another jQuery Vanilla JS Lightbox plugin, suitable for Images, Videos, Inline contents, iFrames, Ajax requests.
The big difference compared to many others modal-window plugins is that VenoBox calculates the max width of the image displayed and preserves its height if is taller than the window. (so in small devices you can scroll down the content, avoiding vertical microscopic resized images).
<a class="my-image-links" data-gall="gallery01" href="image01-big.jpg"><img src="image01-small.jpg"></a> <a class="my-image-links" data-gall="gallery01" href="image02-big.jpg"><img src="image02-small.jpg"></a>
new VenoBox({ selector: '.my-image-links', numeration: true, infinigall: true, share: true, spinner: 'rotating-plane' });
Supported videos from Vimeo and YouTube. Local videos can be mp4, ogg, webm
<a class="my-video-links" data-autoplay="true" data-vbtype="video" href="http://vimeo.com/xxx">Vimeo</a> <a class="my-video-links" data-autoplay="true" data-vbtype="video" href="http://youtu.be/xxx">Youtube</a> <a class="my-video-links" data-autoplay="true" data-vbtype="video" data-ratio="1x1" data-maxwidth="400px" href="my-video.mp4">MP4</a>
new VenoBox({ selector: '.my-video-links', });
<a class="my-custom-links" data-vbtype="iframe" href="https://www.google.com/maps/embed?...">Gmaps</a> <a class="my-custom-links" data-vbtype="iframe" href="http://example.com/">iFrame</a> <a class="my-custom-links" data-vbtype="ajax" data-maxwidth="800px" href="ajax.php">Ajax</a> <a class="my-custom-links" data-vbtype="inline" data-maxwidth="400px" href="#inline-content">Inline</a> <div id="inline-content" style="display:none;"> <h1>Hello world!</h1> </div>
new VenoBox({ selector: '.my-custom-links', });
Include venobox.min.css
into the HTML <head>
<link rel="stylesheet" href="venobox/venobox.min.css" type="text/css" media="screen" />
Include venobox.min.js
near the end of your pages, after the jQuery library
<script type="text/javascript" src="venobox/venobox.min.js"></script>
Insert one or more links with their custom class
<a class="my-link" href="image01-big.jpg"><img src="image01-small.jpg" alt="image alt"/></a> <a class="my-link" data-vbtype="iframe" href="http://example.com/">open iFrame</a>
The default selector is ".venobox"
.
Adding the class venobox
to the links, the plugin can be initialized with zero configuration
new VenoBox();
Initialize all elements containing the class my-link
new VenoBox({ selector: ".my-link" });
VenoBox 2 is designed to be used without jQuery, but it’s still possible to use it with jQuery. If VenoBox detects jQuery in the window object it’ll add venobox()
in jQuery’s plugin system; this means you’ll be able to do $('.venobox').venobox()
to enable it.
Option | Description | Default |
---|---|---|
selector | Items selector | '.venobox' |
autoplay | Automatic play for videos | false |
bgcolor | Background color of the item (also affects border color, if has a border) | '#ffffff' |
border | Border thickness of the modal window | '0px' |
customClass | Set an additional custom class to the main .vbox-overlay wrapper, can be overridden by single items with data-customclass="" Accepts single class name without .dot |
false |
fitView | Resize the images to fit within the viewport height, preventing vertical scroll, can be overridden by single items with data-fitview="true" |
false |
focusItem | Focus current item after popup close | false |
infinigall | Infinite gallery, jumps from last to first item and vice versa | false |
maxWidth | Custom max window width, can be overridden by single items with data-maxwidth="" Accepts any standard css length unit |
'100%' |
navigation | Show navigation arrows | true |
navKeyboard | Enable navigation with keyboard keys | true |
navTouch | Enable swipe touch / drag | true |
navSpeed | Gallery transition speed (milliseconds) | 300 |
numeration | Show navigation number and total items in current gallery | false |
overlayClose | Set false to disable the overlay click-close and keep enabled only the [×] close button |
true |
overlayColor | Backdrop color | 'rgba(255,255,255,0.85)' |
popup | Show automatic popup on page load. (e.g. "#my-link") | false |
ratio | Aspect ratio applied to iframes and videos Available: '1x1' | '4x3' | '16x9' | '21x9' | 'full' |
'16x9' |
share | Sharing buttons for images and videos | false |
shareStyle | Sharing buttons style available: 'block' | 'pill' | 'transparent' | 'bar' |
'bar' |
spinColor | Preloader color | '#d2d2d2' |
spinner | Preloader type Available: 'plane' | 'chase' | 'bounce' | 'wave' | 'pulse' | 'flow' | 'swing' | 'circle' | 'circle-fade' | 'grid' | 'fold | 'wander' |
'bounce' |
titleattr | Specific attribute to display a title (e.g. 'data-title') | 'title' |
titlePosition | Title position, available: 'top' or 'bottom' |
'top' |
titleStyle | Title style. Available: 'block' | 'pill' | 'transparent' | 'bar' |
'top' |
toolsBackground | UI background color (Title and Share buttons) | '#1C1C1C' |
toolsColor | UI color (Title, Share buttons and gallery navigation) | '#d2d2d2' |
initialScale | Initial items transform scale | 0.9 |
transitionSpeed | Transition speed for incoming items (ms) | 200 |
Available spinners:
If the content is not an image you must specify its type via data attribute data-vbtype
Available values: iframe
inline
ajax
video
<a class="venobox" data-vbtype="iframe" href="http://www.example.com">Open Iframe</a> <a class="venobox" data-vbtype="inline" title="My Description" href="#inline">Open inline content</a> <a class="venobox" data-vbtype="ajax" href="ajax-call.php">Retrieve data via Ajax</a> <a class="venobox" data-vbtype="video" href="https://youtu.be/xxxxxx">YouYbe</a>
For Google Maps use the iFrame href attribute of map's embed code and set data-vbtype="iframe"
For videos use the simple url of the video
For inline contents set a hidden element with custom id and call it from your link href
data-maxwidth
overrides the global option maxWidth
Accepts any standard css length unit
<a class="venobox" data-maxwidth="600px" title="My Description" href="image-big.jpg">Open image</a>
To activate navigation between every type of content assign the same data attribute data-gall
to each link.
<a class="venobox" data-gall="myGallery" href="image01-big.jpg"><img src="image01-small.jpg" /></a> <a class="venobox" data-gall="myGallery" href="image02-big.jpg"><img src="image02-small.jpg" /></a> <a class="venobox" data-gall="myGallery" href="image03-big.jpg"><img src="image03-small.jpg" /></a>
Use data-href="..."
to override the default href="..."
<a class="venobox" href="#" data-href="//venobox-destination"
<button class="venobox" data-href="//venobox-destination">Click Me</button>
Optional: set title
attribute to show a description
<a class="venobox" title="Here your description" href="...
or use a custom data attribute, setting a titleattr
option inside the plugin initialization
new VenoBox({ titleattr: 'data-title' });
<a class="venobox" data-title="Here your description" href="...
Use data-autoplay="true"
to automatically start videos
<a class="venobox" data-autoplay="true" data-vbtype="video" href="...
or set the autoplay
option true
inside the plugin initialization to start all the videos
iFrames and Videos can have custom aspect ratio
Available values: 1x1
, 4x3
, 16x9
, 21x9
, full
default: 16x9
<a class="venobox" data-ratio="16x9" data-vbtype="iframe" href="http://www.example.com">Open Iframe</a> <a class="venobox" data-ratio="4x3" data-vbtype="video" href="my-video.mp4">Video</a>
Just add a data-overlay
value to your links for dynamic backgrounds.
<a class="venobox" data-overlay="rgba(95,164,255,0.8)" href="...">...</a> <a class="venobox" data-overlay="#ca294b" href="...">...</a>
Note: don't use this for a static custom background. Simply set the option overlayColor
.
data-customclass
overrides the global option customClass
<a class="venobox" data-customclass="my-custom-class" href="...">Open image</a>
call open, close, next or prev item outside the plugin
// Initialize venobox as a variable var venobox = new VenoBox(); venobox.close(); // Close the modal window venobox.next(); // Navigate the next gallery item venobox.prev(); // Navigate the previous gallery item // Open specific item var myLink = document.querySelector('#my-link'); venobox.open(myLink);
var vboxOptions = { selector: '.my-link', // is called after plugin initialization. onInit: function(plugin){ console.log('INIT'); console.log(plugin); }, // is called before the venobox pops up, return false to prevent opening; onPreOpen: function(obj){ console.log('PRE OPEN'); console.log(obj); }, // is called when opening is finished onPostOpen: function(obj, gallIndex, thenext, theprev){ console.log('POST OPEN'); console.log('current gallery index: ' + gallIndex); console.log(thenext); console.log(theprev); }, // is called before closing, return false to prevent closing onPreClose: function(obj, gallIndex, thenext, theprev){ console.log('PRE CLOSE'); console.log('current gallery index: ' + gallIndex); console.log(thenext); console.log(theprev); }, // is called after gallery navigation step onNavComplete: function(obj, gallIndex, thenext, theprev){ console.log('POST NAV'); console.log('current gallery index: ' + gallIndex); console.log(thenext); console.log(theprev); }, // is called after new content loaded onContentLoaded: function(newcontent){ console.log('NEW CONTENT'); console.log(newcontent); }, } new VenoBox(vboxOptions);