1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00
jellyfin-web/src/components/lazyloader/lazyloader-intersectionobserver.js

77 lines
1.8 KiB
JavaScript
Raw Normal View History

define(['require', 'browser'], function (require, browser) {
'use strict';
2018-10-23 01:05:09 +03:00
function LazyLoader(options) {
this.options = options;
2018-10-23 01:05:09 +03:00
}
if (browser.edge) {
require(['css!./lazyedgehack']);
2018-10-23 01:05:09 +03:00
}
LazyLoader.prototype.createObserver = function () {
var callback = this.options.callback;
var observer = new IntersectionObserver(
(entries, observer) => {
entries.forEach(entry => {
callback(entry);
},
{rootMargin: "50%"});
});
this.observer = observer;
};
LazyLoader.prototype.addElements = function (elements) {
2018-10-23 01:05:09 +03:00
var observer = this.observer;
if (!observer) {
this.createObserver();
observer = this.observer;
}
this.elementCount = (this.elementCount || 0) + elements.length;
for (var i = 0, length = elements.length; i < length; i++) {
observer.observe(elements[i]);
}
};
LazyLoader.prototype.destroyObserver = function (elements) {
2018-10-23 01:05:09 +03:00
var observer = this.observer;
if (observer) {
observer.disconnect();
this.observer = null;
}
};
LazyLoader.prototype.destroy = function (elements) {
this.destroyObserver();
this.options = null;
};
function unveilElements(elements, root, callback) {
if (!elements.length) {
return;
}
var lazyLoader = new LazyLoader({
callback: callback
});
lazyLoader.addElements(elements);
}
LazyLoader.lazyChildren = function (elem, callback) {
unveilElements(elem.getElementsByClassName('lazy'), elem, callback);
};
return LazyLoader;
});