webpack-bootstrap-ui-kit/src/js_old/_components/_ui.sidebar.js

85 lines
2.2 KiB
JavaScript

"use strict";
//import StickySidebar from 'sticky-sidebar/src/sticky-sidebar';
import $ from "jquery";
import Events from "../_events";
const SidebarUI = (($) => {
const D = document;
const W = window;
const $Body = $("body");
const NAME = "SidebarUI";
const CLASSNAME = `js${NAME}`;
const CONTENTHOLDER = "content-holder";
const INNERWRAPPER = `${CLASSNAME}__inner`;
class SidebarUI {
static init() {
const ui = this;
ui.dispose();
if (!$(`.${CLASSNAME}`).length) {
return;
}
console.log(`${NAME}: init ...`);
//const fontSize = parseInt($Body.css('font-size'));
const fontSize = 0;
const contentElement = $(`.${CONTENTHOLDER}`)[0];
//$(`.${CLASSNAME}`).wrapInner(`<div class="${INNERWRAPPER}"></div>`);
const $el = $(`.${CLASSNAME}`);
const $innerWrapper = $(`.${INNERWRAPPER}`);
/*const sticky = new StickySidebar(`.${CLASSNAME}`, {
topSpacing: fontSize,
bottomSpacing: fontSize,
containerSelector: CONTENTHOLDER,
innerWrapperSelector: INNERWRAPPER,
});*/
$el.addClass(`${CLASSNAME}-active`);
$Body.on(`${Events.SCROLL} ${Events.RESIZE}`, (e) => {
const contentOffset = parseInt(contentElement.offsetTop) + fontSize;
const contentOffsetHeight =
parseInt(contentElement.offsetHeight) - fontSize;
const sidebarWidth = $el[0].offsetWidth;
const scrollPos = parseInt($Body.scrollTop());
// normal pos
if (contentOffset >= scrollPos) {
$innerWrapper.attr("style", "");
} else if (
scrollPos >=
contentOffset + contentOffsetHeight - $innerWrapper[0].offsetHeight
) {
// bottom pos
$innerWrapper.attr("style", `position:absolute;bottom:${fontSize}px`);
} else {
// scrolled pos
$innerWrapper.attr(
"style",
`position:fixed;top:${fontSize}px;width:${sidebarWidth}px`
);
}
});
}
static dispose() {
console.log(`${NAME}: dispose`);
}
}
$(W).on(`${NAME}.init ${Events.LODEDANDREADY}`, () => {
SidebarUI.init();
});
W.SidebarUI = new SidebarUI();
return SidebarUI;
})($);
export default SidebarUI;