baseframe-js
Version:
A suite of useful Javascript plugins and functions to help with Front-end Development on websites
249 lines (248 loc) • 13.8 kB
JavaScript
;
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); }
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _cashDom = _interopRequireWildcard(require("cash-dom"));
var _Store = _interopRequireDefault(require("./core/Store"));
var _helpers = require("./util/helpers");
var _throttleResize = _interopRequireDefault(require("./fn/throttleResize"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
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 _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
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); }
function _classPrivateGetter(s, r, a) { return a(_assertClassBrand(s, r)); }
function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
var VERSION = "2.0.1";
var DATA_NAME = 'Parallax';
var EVENT_NAME = 'parallax';
var DEFAULTS = {
speed: 7,
zSpeed: 5,
cssPrefix: 'parallax',
axis: 'y',
scrollAxis: 'y',
zAxis: false,
relativeElem: false,
bgFill: false,
rootMargin: 0,
scrollMaxPxStop: 5000,
zScrollMaxPxStop: 2000,
minWidth: null,
maxWidth: null
};
var _Parallax_brand = /*#__PURE__*/new WeakSet();
var Parallax = exports["default"] = /*#__PURE__*/function () {
function Parallax(element, options, index) {
_classCallCheck(this, Parallax);
//getters
_classPrivateMethodInitSpec(this, _Parallax_brand);
_defineProperty(this, "params", void 0);
_defineProperty(this, "zInitOffset", void 0);
_defineProperty(this, "index", void 0);
_defineProperty(this, "instanceEvent", void 0);
_defineProperty(this, "$window", void 0);
_defineProperty(this, "$element", void 0);
_defineProperty(this, "element", void 0);
_defineProperty(this, "elementOffset", void 0);
_defineProperty(this, "$relElem", void 0);
_defineProperty(this, "winHeight", void 0);
_defineProperty(this, "winWidth", void 0);
_defineProperty(this, "elemHeight", void 0);
_defineProperty(this, "elemWidth", void 0);
_defineProperty(this, "speed", void 0);
_defineProperty(this, "zSpeed", void 0);
_defineProperty(this, "fillAmount", void 0);
_defineProperty(this, "bgFill", void 0);
_defineProperty(this, "bgFillProp", void 0);
_defineProperty(this, "axis", void 0);
_defineProperty(this, "zAxis", void 0);
_defineProperty(this, "scrollMaxPxStop", void 0);
_defineProperty(this, "zScrollMaxPxStop", void 0);
_defineProperty(this, "rootMargin", void 0);
_defineProperty(this, "lastZSpeed", void 0);
_defineProperty(this, "lastCssInProps", void 0);
_defineProperty(this, "minWidthIfSet", void 0);
_defineProperty(this, "maxWidthIfSet", void 0);
_defineProperty(this, "effectCleared", void 0);
_defineProperty(this, "cssPrevDir", void 0);
var _s = this;
var dataOptions = (0, _helpers.getDataOptions)(element, EVENT_NAME);
_s.$window = (0, _cashDom["default"])(window);
_s.$element = (0, _cashDom["default"])(element);
_s.element = element;
_s.params = _cashDom["default"].extend({}, Parallax.defaults, options, dataOptions);
_s.zInitOffset = 0;
_s.index = index;
_s.instanceEvent = EVENT_NAME + index;
_s.$relElem = _classPrivateGetter(_Parallax_brand, _s, _get_relElem);
_s.cssPrevDir = '';
//props to get updated on resize
_s.updatableProps();
_s.handleEvents();
return _s;
}
return _createClass(Parallax, [{
key: "handleEvents",
value: function handleEvents() {
var s = this;
(0, _throttleResize["default"])(function () {
s.updatableProps();
// $(window).trigger(s.instanceEvent);
s.parallax(s);
}, "".concat(s.instanceEvent, "_resize"), true);
(0, _cashDom["default"])(window).on("scroll.".concat(s.instanceEvent, " ").concat(s.instanceEvent), function () {
window.requestAnimationFrame(function () {
s.parallax(s);
});
}).trigger(s.instanceEvent);
}
}, {
key: "handleUpdate",
value: function handleUpdate() {
var s = this;
s.updatableProps();
(0, _cashDom["default"])(window).trigger(s.instanceEvent);
}
}, {
key: "updatableProps",
value: function updatableProps() {
var s = this;
var speed = _classPrivateGetter(_Parallax_brand, s, _get_speed),
zSpeed = _classPrivateGetter(_Parallax_brand, s, _get_zSpeed),
cssPrefix = s.params.cssPrefix,
speedCss = "".concat(cssPrefix, "--").concat(s.params.axis, "-").concat(zSpeed > 0 ? 'pos' : 'neg'),
zSpeedCss = s.params.zAxis ? " ".concat(cssPrefix, "--z-").concat(zSpeed > 0 ? 'pos' : 'neg') : '',
newCssDir = "".concat(speedCss).concat(zSpeedCss),
rm = s.params.rootMargin;
//reset to get new measurements
s.$element.css({
transform: null,
height: null,
width: null
}).removeClass(s.cssPrevDir).addClass(newCssDir);
s.cssPrevDir = newCssDir;
s.winHeight = s.$window.height();
s.winWidth = s.$window.width();
s.elemHeight = s.$relElem[0].scrollHeight;
s.elemWidth = s.$relElem[0].scrollWidth;
s.speed = speed;
s.zSpeed = zSpeed;
s.fillAmount = _classPrivateGetter(_Parallax_brand, s, _get_fillAmount);
s.bgFill = s.params.bgFill;
s.axis = s.params.axis;
s.bgFillProp = s.axis === 'y' ? 'height' : 'width';
s.zAxis = s.params.zAxis;
s.$relElem = _classPrivateGetter(_Parallax_brand, s, _get_relElem);
s.scrollMaxPxStop = s.params.scrollMaxPxStop;
s.zScrollMaxPxStop = s.params.zScrollMaxPxStop;
s.lastZSpeed = 0;
s.rootMargin = typeof s.params.rootMargin === 'number' ? [rm, rm] : rm;
s.minWidthIfSet = s.params.minWidth ? s.winWidth > s.params.minWidth : true;
s.maxWidthIfSet = s.params.maxWidth ? s.winWidth < s.params.maxWidth : true;
s.elementOffset = s.getElementRects();
if (s.lastCssInProps) {
s.$element.css(s.lastCssInProps);
}
}
}, {
key: "getElementRects",
value: function getElementRects() {
var s = this;
var elPos = s.$element.offset(),
top = elPos.top,
left = elPos.left,
bottom = top + s.elemHeight,
right = left + s.elemWidth;
return {
top: top,
left: left,
bottom: bottom,
right: right
};
}
}, {
key: "parallax",
value: function parallax(s) {
var scrollAxis = s.params.scrollAxis,
_s$rootMargin = _slicedToArray(s.rootMargin, 2),
rootMStart = _s$rootMargin[0],
rootMEnd = _s$rootMargin[1],
withinMinAndMaxIfSet = s.minWidthIfSet && s.maxWidthIfSet,
scrollVertical = scrollAxis === 'y',
offset = scrollVertical ? s.elementOffset.top : s.elementOffset.left,
winSide = (scrollVertical ? s.winHeight : s.winWidth) - rootMStart,
scrollDir = scrollVertical ? window.scrollY : window.scrollX,
pixelStart = offset > winSide ? winSide - offset + scrollDir : offset + (scrollDir - offset);
if (s.isInView(scrollVertical, pixelStart, scrollDir, rootMEnd) && withinMinAndMaxIfSet) {
var speed = pixelStart * s.speed,
zSpeed = pixelStart * s.zSpeed,
speedPx = speed < s.zScrollMaxPxStop ? speed : s.zScrollMaxPxStop,
zSpeedPx = s.params.zAxis ? s.lastZSpeed < s.zScrollMaxPxStop ? zSpeed : s.lastZSpeed : 0,
translateParams = s.axis === 'y' ? "0, ".concat(speedPx, "px, ").concat(zSpeedPx, "px") : "".concat(speedPx, "px, 0, ").concat(zSpeedPx, "px");
var cssProps = _defineProperty({
transform: "translate3d(".concat(translateParams, ")")
}, s.bgFillProp, s.bgFill ? "calc(100% + ".concat(s.fillAmount, "px)") : null);
s.lastZSpeed = zSpeedPx;
s.lastCssInProps = cssProps;
s.$element.css(cssProps);
}
}
}, {
key: "isInView",
value: function isInView(scrollVertical, pixelStart, scrollDir, rootMargin) {
var s = this;
var elemOffsetEnd = scrollVertical ? s.elementOffset.bottom : s.elementOffset.right;
return scrollDir + rootMargin <= elemOffsetEnd && pixelStart >= 0;
}
}], [{
key: "remove",
value: function remove(element, plugin) {
(0, _cashDom["default"])(element).each(function () {
var s = plugin || (0, _Store["default"])(this, DATA_NAME);
(0, _cashDom["default"])(window).off("scroll.".concat(s.instanceEvent, " resize.").concat(s.instanceEvent, " ").concat(s.instanceEvent, "_resize ").concat(s.instanceEvent));
s.$element.css({
'transform': null,
height: null,
width: null
}).removeClass(s.cssPrevDir);
(0, _Store["default"])(this, DATA_NAME, null);
});
}
}]);
}();
function _get_fillAmount(_this) {
var s = _this;
var saY = s.params.scrollAxis === 'y';
var winSide = s.params.axis === 'y' ? s.winHeight : s.winWidth + (saY ? 0 : s.elemWidth);
return winSide * Math.abs(s.speed);
}
function _get_speed(_this2) {
var s = _this2;
return s.params.speed / 100;
}
function _get_zSpeed(_this3) {
var s = _this3;
return s.params.zSpeed / 100;
}
function _get_relElem(_this4) {
var s = _this4;
return s.params.relativeElem ? s.$element.closest(s.params.relativeElem) : s.$element;
}
_defineProperty(Parallax, "defaults", DEFAULTS);
_defineProperty(Parallax, "version", VERSION);
_defineProperty(Parallax, "pluginName", DATA_NAME);