jellyfin-web/dashboard-ui/thirdparty/jquery.unveil-custom.js

120 lines
3.0 KiB
JavaScript
Raw Normal View History

2016-01-12 12:55:45 -07:00
define(['visibleinviewport'], function (visibleInViewport) {
2016-01-12 12:55:45 -07:00
var wheelEvent = (document.implementation.hasFeature('Event.wheel', '3.0') ? 'wheel' : 'mousewheel');
var thresholdX = screen.availWidth;
var thresholdY = screen.availHeight;
2015-10-28 10:09:55 -07:00
function isVisible(elem) {
2016-01-12 12:55:45 -07:00
return visibleInViewport(elem, true, thresholdX, thresholdY);
2015-10-28 10:09:55 -07:00
}
2015-10-28 10:09:55 -07:00
function fillImage(elem) {
var source = elem.getAttribute('data-src');
if (source) {
ImageStore.setImageInto(elem, source);
elem.setAttribute("data-src", '');
}
}
2015-12-14 08:43:03 -07:00
function unveilElements(elems) {
2015-10-28 10:09:55 -07:00
if (!elems.length) {
return;
}
2015-10-28 10:09:55 -07:00
var images = elems;
2015-10-28 10:09:55 -07:00
function unveil() {
2015-10-28 10:09:55 -07:00
var remaining = [];
2015-10-28 10:09:55 -07:00
for (var i = 0, length = images.length; i < length; i++) {
var img = images[i];
if (isVisible(img)) {
fillImage(img);
} else {
remaining.push(img);
}
}
2015-10-28 10:09:55 -07:00
images = remaining;
2015-10-28 10:09:55 -07:00
if (!images.length) {
2016-01-10 10:37:02 -07:00
document.removeEventListener('scroll', unveil, true);
document.removeEventListener(wheelEvent, unveil, true);
window.removeEventListener('resize', unveil, true);
}
}
2015-12-14 08:43:03 -07:00
document.addEventListener('scroll', unveil, true);
document.addEventListener(wheelEvent, unveil, true);
window.addEventListener('resize', unveil, true);
2015-05-09 21:29:04 -07:00
2015-10-28 10:09:55 -07:00
unveil();
}
2015-05-11 09:32:15 -07:00
2015-10-28 10:09:55 -07:00
function fillImages(elems) {
2015-05-11 09:32:15 -07:00
2015-10-28 10:09:55 -07:00
for (var i = 0, length = elems.length; i < length; i++) {
var elem = elems[0];
var source = elem.getAttribute('data-src');
if (source) {
ImageStore.setImageInto(elem, source);
elem.setAttribute("data-src", '');
}
2015-05-11 09:32:15 -07:00
}
2015-10-28 10:09:55 -07:00
}
2015-10-12 12:09:56 -07:00
2015-10-28 10:09:55 -07:00
function lazyChildren(elem) {
2015-10-28 10:09:55 -07:00
unveilElements(elem.getElementsByClassName('lazy'), elem);
}
2015-10-28 10:09:55 -07:00
function lazyImage(elem, url) {
2015-10-28 10:09:55 -07:00
elem.setAttribute('data-src', url);
fillImages([elem]);
}
2015-10-28 10:09:55 -07:00
function setImageIntoElement(elem, url) {
2015-10-28 10:09:55 -07:00
if (elem.tagName !== "IMG") {
2015-10-28 10:09:55 -07:00
elem.style.backgroundImage = "url('" + url + "')";
2015-10-28 10:09:55 -07:00
} else {
elem.setAttribute("src", url);
}
2015-12-14 08:43:03 -07:00
if (browserInfo.animate && !browserInfo.mobile) {
2015-10-28 10:09:55 -07:00
if (!elem.classList.contains('noFade')) {
fadeIn(elem, 1);
}
2015-10-28 10:09:55 -07:00
}
}
2015-10-28 10:09:55 -07:00
function fadeIn(elem, iterations) {
2015-10-12 12:09:56 -07:00
2015-10-28 10:09:55 -07:00
var keyframes = [
{ opacity: '0', offset: 0 },
{ opacity: '1', offset: 1 }];
var timing = { duration: 200, iterations: iterations };
return elem.animate(keyframes, timing);
}
2015-05-11 09:32:15 -07:00
2015-10-28 10:09:55 -07:00
function simpleImageStore() {
2015-05-09 21:29:04 -07:00
2015-10-28 10:09:55 -07:00
var self = this;
2015-05-09 21:29:04 -07:00
2015-10-28 10:09:55 -07:00
self.setImageInto = setImageIntoElement;
}
2015-05-09 21:29:04 -07:00
2015-10-28 10:09:55 -07:00
window.ImageStore = new simpleImageStore();
2015-05-12 21:55:19 -07:00
2016-01-12 12:55:45 -07:00
window.ImageLoader = {
fillImages: fillImages,
lazyImage: lazyImage,
lazyChildren: lazyChildren
};
});