baseframe-js
Version:
A suite of useful Javascript plugins and functions to help with Front-end Development on websites
121 lines (120 loc) • 5.62 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _cashDom = _interopRequireDefault(require("cash-dom"));
var _helpers = require("./util/helpers");
var _Store = _interopRequireDefault(require("./core/Store"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
var VERSION = '2.0.1';
var DATA_NAME = 'LazyLoad';
var EVENT_NAME = 'lazyLoad';
var DEFAULTS = {
imgSrcName: 'src',
bgSrcName: 'bgSrc',
loadImgs: true,
inEvt: null,
outEvt: null,
force: false,
observerID: null,
unobserve: true,
observerOpts: {
rootMargin: '48px'
}
};
var lazyElemObservers = new Map();
var lazyElemObserver = function lazyElemObserver(s) {
var observerOpts = s.params.observerOpts;
return new IntersectionObserver(function (entries) {
entries.forEach(function (entry) {
var _s$params = s.params,
inEvt = _s$params.inEvt,
outEvt = _s$params.outEvt,
force = _s$params.force,
unobserve = _s$params.unobserve,
loadImgs = _s$params.loadImgs;
var lazyElem = entry.target;
if (lazyElem instanceof HTMLElement) {
if (entry.isIntersecting && (0, _helpers.isVisible)(lazyElem) || force) {
loadImgs && s.imgAndBg(s, lazyElem);
typeof inEvt === 'function' && inEvt(lazyElem, entry);
unobserve && s.lazyElemObserver.unobserve(lazyElem);
} else {
typeof outEvt === 'function' && outEvt(lazyElem, entry);
}
}
});
}, observerOpts);
};
var LazyLoad = exports["default"] = /*#__PURE__*/function () {
function LazyLoad(element, options) {
_classCallCheck(this, LazyLoad);
_defineProperty(this, "element", void 0);
_defineProperty(this, "params", void 0);
_defineProperty(this, "lazyElemObserver", void 0);
var s = this;
var dataOptions = (0, _helpers.getDataOptions)(element, EVENT_NAME);
s.element = element;
s.lazyElemObserver;
s.params = _cashDom["default"].extend({}, LazyLoad.defaults, options, dataOptions);
s.handleEvents();
return s;
}
return _createClass(LazyLoad, [{
key: "imgAndBg",
value: function imgAndBg(s, lazyElem) {
var _s$params2 = s.params,
imgSrcName = _s$params2.imgSrcName,
bgSrcName = _s$params2.bgSrcName;
var src = lazyElem.dataset[imgSrcName];
var bgImg = lazyElem.dataset[bgSrcName];
if (lazyElem.loading === 'lazy') {
lazyElem.loading = 'eager';
}
if (src) {
lazyElem.src = src;
}
if (bgImg) {
lazyElem.style.backgroundImage = "url(\"".concat(bgImg, "\")");
lazyElem.removeAttribute('data-bg-src');
}
}
}, {
key: "handleEvents",
value: function handleEvents() {
var s = this;
var observerID = s.params.observerID;
if (observerID && !lazyElemObservers.has(observerID)) {
lazyElemObservers.set(observerID, lazyElemObserver(s));
s.lazyElemObserver = lazyElemObservers.get(observerID);
} else {
s.lazyElemObserver = lazyElemObserver(s);
}
if (!observerID) {
console.warn("It recommended to set an 'observerID', so the element group can leverage the same one.", s.element);
}
s.lazyElemObserver.observe(s.element);
}
}], [{
key: "remove",
value: function remove(element, plugin) {
(0, _cashDom["default"])(element).each(function () {
var s = plugin || (0, _Store["default"])(this, DATA_NAME);
lazyElemObservers["delete"](s.params.observerID);
s.lazyElemObserver.unobserve(this);
(0, _Store["default"])(this, DATA_NAME, null);
});
}
}]);
}();
_defineProperty(LazyLoad, "defaults", DEFAULTS);
_defineProperty(LazyLoad, "version", VERSION);
_defineProperty(LazyLoad, "pluginName", DATA_NAME);