2019-01-10 15:39:37 +03:00
|
|
|
define(['require', 'browser'], function (require, browser) {
|
|
|
|
'use strict';
|
2018-10-23 01:05:09 +03:00
|
|
|
|
|
|
|
function LazyLoader(options) {
|
2019-01-10 15:39:37 +03:00
|
|
|
|
|
|
|
this.options = options;
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
|
|
|
|
2019-01-10 15:39:37 +03:00
|
|
|
if (browser.edge) {
|
|
|
|
require(['css!./lazyedgehack']);
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
2019-01-10 15:39:37 +03:00
|
|
|
|
|
|
|
LazyLoader.prototype.createObserver = function () {
|
2020-04-11 22:51:11 +02:00
|
|
|
var callback = this.options.callback;
|
|
|
|
|
|
|
|
var observer = new IntersectionObserver(
|
|
|
|
(entries, observer) => {
|
|
|
|
entries.forEach(entry => {
|
|
|
|
callback(entry);
|
|
|
|
},
|
|
|
|
{rootMargin: "50%"});
|
|
|
|
});
|
2019-01-10 15:39:37 +03:00
|
|
|
|
|
|
|
this.observer = observer;
|
|
|
|
};
|
|
|
|
|
|
|
|
LazyLoader.prototype.addElements = function (elements) {
|
|
|
|
|
2018-10-23 01:05:09 +03:00
|
|
|
var observer = this.observer;
|
2019-01-10 15:39:37 +03:00
|
|
|
|
|
|
|
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;
|
2019-01-10 15:39:37 +03:00
|
|
|
|
|
|
|
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;
|
2020-02-22 11:47:03 -05:00
|
|
|
});
|