FancyBox
FancyBox offers a nice and elegant way to add zooming functionality for images, html content and multi-media on your webpages.
FancyBox documentationHow to use?
Copy-paste the stylesheet <link>
into your <head>
to load the CSS.
<link rel="stylesheet" href="../../assets/vendor/fancybox/jquery.fancybox.css">
Copy-paste the following <script>
near the end of your pages under JS Implementing Plugins to enable it.
<script src="../../assets/vendor/fancybox/jquery.fancybox.min.js"></script>
Copy-paste the following <script>
near the end of your pages under JS Front to enable it.
<script src="../../assets/js/hs.fancybox.js"></script>
Copy-paste the init function under JS Plugins Init., before the closing </body>
tag, to enable it.
<script>
$(document).on('ready', function () {
// initialization of fancybox
$('.js-fancybox').each(function () {
var fancybox = $.HSCore.components.HSFancyBox.init($(this));
});
});
</script>
Single image
<div class="row">
<div class="col-sm-4 mb-3">
<a class="js-fancybox media-viewer" href="javascript:;"
data-hs-fancybox-options='{
"speed": 700
}'
data-src="..."
data-caption="Front in frames - image #01">
<img class="img-fluid rounded" src="..." alt="Image Description">
<span class="media-viewer-container">
<span class="media-viewer-icon">
<i class="fas fa-plus"></i>
</span>
</span>
</a>
</div>
<div class="col-sm-4 mb-3">
<a class="js-fancybox media-viewer" href="javascript:;"
data-hs-fancybox-options='{
"speed": 700
}'
data-src="..."
data-caption="Front in frames - image #02">
<img class="img-fluid rounded" src="..." alt="Image Description">
<span class="media-viewer-container">
<span class="media-viewer-icon">
<i class="fas fa-plus"></i>
</span>
</span>
</a>
</div>
<div class="col-sm-4 mb-3">
<a class="js-fancybox media-viewer" href="javascript:;"
data-hs-fancybox-options='{
"speed": 700
}'
data-src="..."
data-caption="Front in frames - image #03">
<img class="img-fluid rounded" src="..." alt="Image Description">
<span class="media-viewer-container">
<span class="media-viewer-icon">
<i class="fas fa-plus"></i>
</span>
</span>
</a>
</div>
</div>
Gallery
Galleries are created from elements which have the same ID and class "selector": "#fancyboxGallery1 .js-fancybox",
attribute value.
<div id="fancyboxGallery1" class="row">
<div class="col-sm-4 mb-3">
<a class="js-fancybox media-viewer" href="javascript:;"
data-hs-fancybox-options='{
"selector": "#fancyboxGallery1 .js-fancybox",
"speed": 700
}'
data-src="..."
data-caption="Front in frames - image #01">
<img class="img-fluid rounded" src="..." alt="Image Description">
<span class="media-viewer-container">
<span class="media-viewer-icon">
<i class="fas fa-plus media-viewer-icon-inner"></i>
</span>
</span>
</a>
</div>
<div class="col-sm-4 mb-3">
<a class="js-fancybox media-viewer" href="javascript:;"
data-hs-fancybox-options='{
"selector": "#fancyboxGallery1 .js-fancybox",
"speed": 700
}'
data-src="..."
data-caption="Front in frames - image #02">
<img class="img-fluid rounded" src="..." alt="Image Description">
<span class="media-viewer-container">
<span class="media-viewer-icon">
<i class="fas fa-plus media-viewer-icon-inner"></i>
</span>
</span>
</a>
</div>
<div class="col-sm-4 mb-3">
<a class="js-fancybox media-viewer" href="javascript:;"
data-hs-fancybox-options='{
"selector": "#fancyboxGallery1 .js-fancybox",
"speed": 700
}'
data-src="..."
data-caption="Front in frames - image #03">
<img class="img-fluid rounded" src="..." alt="Image Description">
<span class="media-viewer-container">
<span class="media-viewer-icon">
<i class="fas fa-plus media-viewer-icon-inner"></i>
</span>
</span>
</a>
</div>
</div>
Enable infinity slideshow with "loop": true
helper.
<div id="fancyboxGallery2" class="row">
<div class="col-sm-4 mb-3">
<a class="js-fancybox media-viewer" href="javascript:;"
data-hs-fancybox-options='{
"selector": "#fancyboxGallery2 .js-fancybox",
"speed": 700,
"loop": true
}'
data-src="..."
data-caption="Front in frames - image #01">
<img class="img-fluid rounded" src="..." alt="Image Description">
<span class="media-viewer-container">
<span class="media-viewer-icon">
<i class="fas fa-plus media-viewer-icon-inner"></i>
</span>
</span>
</a>
</div>
<div class="col-sm-4 mb-3">
<a class="js-fancybox media-viewer" href="javascript:;"
data-hs-fancybox-options='{
"selector": "#fancyboxGallery2 .js-fancybox",
"speed": 700,
"loop": true
}'
data-src="..."
data-caption="Front in frames - image #02">
<img class="img-fluid rounded" src="..." alt="Image Description">
<span class="media-viewer-container">
<span class="media-viewer-icon">
<i class="fas fa-plus media-viewer-icon-inner"></i>
</span>
</span>
</a>
</div>
<div class="col-sm-4 mb-3">
<a class="js-fancybox media-viewer" href="javascript:;"
data-hs-fancybox-options='{
"selector": "#fancyboxGallery2 .js-fancybox",
"speed": 700,
"loop": true
}'
data-src="..."
data-caption="Front in frames - image #03">
<img class="img-fluid rounded" src="..." alt="Image Description">
<span class="media-viewer-container">
<span class="media-viewer-icon">
<i class="fas fa-plus media-viewer-icon-inner"></i>
</span>
</span>
</a>
</div>
</div>
There is a built-in "overlayBg": "rgba(color, .opacityValue)"
helper. Set your custom option.
<div class="row">
<div class="col-sm-4 mb-3">
<a class="js-fancybox media-viewer" href="javascript:;"
data-hs-fancybox-options='{
"overlayBg": "rgba(255, 255, 255, .9)"
}'
data-src="assets/img/img21-lg.jpg"
data-caption="Front in frames - image #01">
<img class="img-fluid rounded" src="..." alt="Image Description">
<span class="media-viewer-container">
<span class="media-viewer-icon">
<i class="fas fa-plus media-viewer-icon-inner"></i>
</span>
</span>
</a>
</div>
<div class="col-sm-4 mb-3">
<a class="js-fancybox media-viewer" href="javascript:;"
data-hs-fancybox-options='{
"overlayBg": "rgba(0, 0, 0, .9)"
}'
data-src="assets/img/img22-lg.jpg"
data-caption="Front in frames - image #02">
<img class="img-fluid rounded" src="..." alt="Image Description">
<span class="media-viewer-container">
<span class="media-viewer-icon">
<i class="fas fa-plus media-viewer-icon-inner"></i>
</span>
</span>
</a>
</div>
<div class="col-sm-4 mb-3">
<a class="js-fancybox media-viewer" href="javascript:;"
data-hs-fancybox-options='{
"overlayBg": "rgba(255, 255, 255, .3)"
}'
data-src="assets/img/img23-lg.jpg"
data-caption="Front in frames - image #03">
<img class="img-fluid rounded" src="..." alt="Image Description">
<span class="media-viewer-container">
<span class="media-viewer-icon">
<i class="fas fa-plus media-viewer-icon-inner"></i>
</span>
</span>
</a>
</div>
</div>
Or you can apply "overlayBlurBg": true
helper.
<div class="row">
<div class="col-sm-4 mb-3">
<a class="js-fancybox media-viewer" href="javascript:;"
data-hs-fancybox-options='{
"overlayBlurBg": true,
"speed": 700,
"loop": true
}'
data-src="..."
data-caption="Front in frames - image #01">
<img class="img-fluid rounded" src="..." alt="Image Description">
<span class="media-viewer-container">
<span class="media-viewer-icon">
<i class="fas fa-plus media-viewer-icon-inner"></i>
</span>
</span>
</a>
</div>
<div class="col-sm-4 mb-3">
<a class="js-fancybox media-viewer" href="javascript:;"
data-hs-fancybox-options='{
"overlayBlurBg": true,
"speed": 700,
"loop": true
}'
data-src="..."
data-caption="Front in frames - image #02">
<img class="img-fluid rounded" src="..." alt="Image Description">
<span class="media-viewer-container">
<span class="media-viewer-icon">
<i class="fas fa-plus media-viewer-icon-inner"></i>
</span>
</span>
</a>
</div>
<div class="col-sm-4 mb-3">
<a class="js-fancybox media-viewer" href="javascript:;"
data-hs-fancybox-options='{
"overlayBlurBg": true,
"speed": 700,
"loop": true
}'
data-src="..."
data-caption="Front in frames - image #03">
<img class="img-fluid rounded" src="..." alt="Image Description">
<span class="media-viewer-container">
<span class="media-viewer-icon">
<i class="fas fa-plus media-viewer-icon-inner"></i>
</span>
</span>
</a>
</div>
</div>
Also control the the popup opening, autoplay and the slideshow speed with "slideShow": {
"autoStart": true,
"speed": 5000
}
helpers.
<div id="fancyboxGallery4" class="row">
<div class="col-sm-4 mb-3">
<a class="js-fancybox media-viewer" href="javascript:;"
data-hs-fancybox-options='{
"selector": "#fancyboxGallery4 .js-fancybox",
"speed": 700,
"loop": true,
"slideShow": {
"autoStart": true,
"speed": 5000
}
}'
data-src="..."
data-caption="Front in frames - image #01">
<img class="img-fluid rounded" src="..." alt="Image Description">
<span class="media-viewer-container">
<span class="media-viewer-icon">
<i class="fas fa-plus media-viewer-icon-inner"></i>
</span>
</span>
</a>
</div>
<div class="col-sm-4 mb-3">
<a class="js-fancybox media-viewer" href="javascript:;"
data-hs-fancybox-options='{
"selector": "#fancyboxGallery4 .js-fancybox",
"speed": 700,
"loop": true,
"slideShow": {
"autoStart": true,
"speed": 5000
}
}'
data-src="..."
data-caption="Front in frames - image #02">
<img class="img-fluid rounded" src="..." alt="Image Description">
<span class="media-viewer-container">
<span class="media-viewer-icon">
<i class="fas fa-plus media-viewer-icon-inner"></i>
</span>
</span>
</a>
</div>
<div class="col-sm-4 mb-3">
<a class="js-fancybox media-viewer" href="javascript:;"
data-hs-fancybox-options='{
"selector": "#fancyboxGallery4 .js-fancybox",
"speed": 700,
"loop": true,
"slideShow": {
"autoStart": true,
"speed": 5000
}
}'
data-src="..."
data-caption="Front in frames - image #03">
<img class="img-fluid rounded" src="..." alt="Image Description">
<span class="media-viewer-container">
<span class="media-viewer-icon">
<i class="fas fa-plus media-viewer-icon-inner"></i>
</span>
</span>
</a>
</div>
</div>
Fancybox types
Script uses the "src": ""
attribute of the matched elements to obtain the location of the content and to figure out content type you want to display.
<!-- Fancybox Form -->
<button type="button" class="btn btn-sm btn-primary transition-3d-hover" data-toggle="modal" data-target="#fancyboxForm">
Open Form
</button>
<!-- End Fancybox Form -->
<!-- Form -->
<div class="modal fade" id="fancyboxForm" tabindex="-1" role="dialog" aria-labelledby="fancyboxFormlTitle" aria-hidden="true">
<div class="modal-dialog modal-sm" role="document">
<div class="modal-content">
<!-- Header -->
<div class="modal-header">
<h4 id="fancyboxFormlTitle" class="mb-0">Form modal</h4>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<svg aria-hidden="true" class="mb-0" width="14" height="14" viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg">
<path fill="currentColor" d="M11.5,9.5l5-5c0.2-0.2,0.2-0.6-0.1-0.9l-1-1c-0.3-0.3-0.7-0.3-0.9-0.1l-5,5l-5-5C4.3,2.3,3.9,2.4,3.6,2.6l-1,1 C2.4,3.9,2.3,4.3,2.5,4.5l5,5l-5,5c-0.2,0.2-0.2,0.6,0.1,0.9l1,1c0.3,0.3,0.7,0.3,0.9,0.1l5-5l5,5c0.2,0.2,0.6,0.2,0.9-0.1l1-1 c0.3-0.3,0.3-0.7,0.1-0.9L11.5,9.5z"/>
</svg>
</button>
</div>
<!-- End Header -->
<!-- Body -->
<div class="modal-body">
<form>
<div class="form-group">
<label for="exampleInputEmail1">Email address</label>
<input type="email" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp" placeholder="Enter email">
<small id="emailHelp" class="form-text text-muted">We'll never share your email with anyone else.</small>
</div>
<div class="form-group">
<label for="exampleInputPassword1">Password</label>
<input type="password" class="form-control" id="exampleInputPassword1" placeholder="Password">
</div>
<div class="form-group form-check">
<input type="checkbox" class="form-check-input" id="exampleCheck1">
<label class="form-check-label" for="exampleCheck1">Check me out</label>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>
</div>
</div>
</div>
<!-- End Form -->
<!-- Video -->
<a class="js-fancybox btn btn-sm btn-primary transition-3d-hover" href="javascript:;"
data-hs-fancybox-options='{
"src": "//youtube.com/0qisGSwZym4",
"speed": 700
}'>
Open Video
</a>
<!-- End Video -->
<!-- Ajax -->
<a class="js-fancybox fancybox.iframe btn btn-sm btn-primary transition-3d-hover" href="javascript:;"
data-hs-fancybox-options='{
"src": "assets/ajax/fancybox/ajax.html",
"type": "ajax",
"speed": 700
}'>
Ajax
</a>
<!-- End Ajax -->
Multiple inner images
Multiple inner (hidden) images within slideshow.
<div id="fancyboxGallery5">
<div class="row">
<div class="col-sm-4 mb-3">
<a class="js-fancybox media-viewer" href="javascript:;"
data-hs-fancybox-options='{
"selector": "#fancyboxGallery5 .js-fancybox",
"speed": 700
}'
data-src="..."
data-caption="Front in frames - image #01">
<img class="img-fluid rounded" src="..." alt="Image Description">
<span class="media-viewer-container">
<span class="media-viewer-icon">
<i class="fas fa-plus media-viewer-icon-inner"></i>
</span>
</span>
</a>
</div>
<div class="col-sm-4 mb-3">
<a class="js-fancybox media-viewer" href="javascript:;"
data-hs-fancybox-options='{
"selector": "#fancyboxGallery5 .js-fancybox",
"speed": 700
}'
data-src="..."
data-caption="Front in frames - image #02">
<img class="img-fluid rounded" src="..." alt="Image Description">
<span class="media-viewer-container">
<span class="media-viewer-icon">
<i class="fas fa-plus media-viewer-icon-inner"></i>
</span>
</span>
</a>
</div>
<div class="col-sm-4 mb-3">
<a class="js-fancybox media-viewer" href="javascript:;"
data-hs-fancybox-options='{
"selector": "#fancyboxGallery5 .js-fancybox",
"speed": 700
}'
data-src="..."
data-caption="Front in frames - image #03">
<img class="img-fluid rounded" src="..." alt="Image Description">
<span class="media-viewer-container">
<span class="media-viewer-icon media-viewer-icon-active">
<span class="media-viewer-icon-inner">+3</span>
</span>
</span>
</a>
</div>
</div>
<img class="js-fancybox d-none" alt="Image Description"
data-hs-fancybox-options='{
"selector": "#fancyboxGallery5 .js-fancybox",
"speed": 700
}'
data-src="assets/img/img24-lg.jpg"
data-caption="Front in frames - image #04">
<img class="js-fancybox d-none" alt="Image Description"
data-hs-fancybox-options='{
"selector": "#fancyboxGallery5 .js-fancybox",
"speed": 700
}'
data-src="assets/img/img25-lg.jpg"
data-caption="Front in frames - image #05">
<img class="js-fancybox d-none" alt="Image Description"
data-hs-fancybox-options='{
"selector": "#fancyboxGallery5 .js-fancybox",
"speed": 700
}'
data-src="assets/img/img26-lg.jpg"
data-caption="Front in frames - image #06">
</div>
Multiple inner videos
Multiple inner (hidden) videos within slideshow.
<div id="fancyboxGallery6">
<div class="row">
<div class="col-sm-4 mb-3">
<a class="js-fancybox media-viewer" href="javascript:;"
data-hs-fancybox-options='{
"selector": "#fancyboxGallery6 .js-fancybox",
"speed": 700,
"buttons": ["fullScreen", "close"],
"media": {
"youtube": {
"params": {
"autoplay": 0
}
}
}
}'
data-src="//youtube.com/0qisGSwZym4"
data-caption="Front in frames - video #01">
<img class="img-fluid rounded" src="..." alt="Image Description">
<span class="media-viewer-container">
<span class="media-viewer-icon">
<span class="media-viewer-icon media-viewer-icon-active">
<span class="media-viewer-icon-inner">+3</span>
</span>
</span>
</span>
</a>
</div>
</div>
<iframe class="js-fancybox d-none"
data-hs-fancybox-options='{
"selector": "#fancyboxGallery6 .js-fancybox",
"speed": 700,
"buttons": ["fullScreen", "close"],
"media": {
"vimeo": {
"params": {
"autoplay": 0
}
}
}
}'
data-src="//vimeo.com/167434033"
data-caption="Front in frames - video #02"></iframe>
</div>
Multiple inner videos (Autoplay)
Multiple inner (autoplay) videos within slideshow.
<div id="fancyboxGallery7">
<div class="row">
<div class="col-sm-4 mb-3">
<a class="js-fancybox media-viewer" href="javascript:;"
data-hs-fancybox-options='{
"selector": "#fancyboxGallery7 .js-fancybox",
"speed": 700,
"buttons": ["fullScreen", "close"],
"youtube": {
"autoplay": 1
}
}'
data-src="//youtube.com/0qisGSwZym4"
data-caption="Front in frames - video #01">
<img class="img-fluid rounded" src="..." alt="Image Description">
<span class="media-viewer-container">
<span class="media-viewer-icon">
<span class="media-viewer-icon media-viewer-icon-active">
<span class="media-viewer-icon-inner">+3</span>
</span>
</span>
</span>
</a>
</div>
</div>
<iframe class="js-fancybox d-none"
data-hs-fancybox-options='{
"selector": "#fancyboxGallery7 .js-fancybox",
"speed": 700,
"buttons": ["fullScreen", "close"],
"vimeo": {
"autoplay": 1
}
}'
data-src="//vimeo.com/167434033"
data-caption="Front in frames - video #02"></iframe>
</div>
Extend
By assigning a variable, you can call the standard methods of the plugin:
<script>
$(document).on('ready', function () {
// initialization of fancybox
$('.js-fancybox').each(function () {
var fancybox = $.HSCore.components.HSFancyBox.init($(this), {
afterClose: function() {
console.log('Closed!!!');
}
});
});
});
</script>
Attributes
By assigning a variable, you can call the standard methods of the plugin:
data-hs-fancybox-options='{
...
// Custom
"transitionEffectCustom": {
"onShow": "fadeIn",
"onHide": "fadeOut"
},
"overlayBg": "#ff0000",
"overlayBlurBg": true
}' - array
Methods
Options can be passed via data attributes or JavaScript. For data attributes, append the option name to data-hs-fancybox-options='{}'
. For more detailed or missing attributes/functions, see the official FancyBox documentation page.
Parameters | Description |
---|---|
|
Reveal effect |
|
Hide effect |
|
Overlay color |
|
if true , then turns on the background blur effect |