'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(`
`); 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