1 line
6.7 KiB
JavaScript
1 line
6.7 KiB
JavaScript
|
|
import dom from"./../dom.js";import layoutManager from"./../layoutmanager.js";import appHeaderContent from"./../appheader/appheadercontent.js";let insetsDebug=!1,debugHeight="34px";function Headroom(options){options=options||{},this.lastScrollY=0,this.lastTransformScrollY=0,this.element=options.element,this.scrollElementForEvents=options.scroller||window,this.scroller=this.scrollElementForEvents,this.offset=options.offset,this.enableScrollingStatus=options.enableScrollingStatus,this.paused=!0}insetsDebug&&document.body.insertAdjacentHTML("afterbegin",'<div style="background: lightgray; position: fixed; top: 0; left: 0; right: 0; height: '+debugHeight+'; display: flex; align-items: flex-end; z-index: 99999;">Control Bar</div>'),require(["css!modules/headroom/headroom.css"]);let isNativeAndroid="android"===globalThis.appMode;function detectCssEnvSupported(){if(isNativeAndroid)return!0;try{var val=getComputedStyle(document.documentElement).getPropertyValue("--env-inset-top");if(val&&!val.includes("env("))return!0}catch(err){}return!1}function removeCssVariable(){try{insetsDebug?document.documentElement.style.setProperty("--env-inset-top",debugHeight):document.documentElement.style.setProperty("--env-inset-top","1")}catch(err){}}let headerElement=document.querySelector(".skinHeader"),currentInstance,supportsCssEnv=(dom.addEventListener(headerElement,"focus",function(){var scroller;currentInstance&¤tInstance.hideWithAnyScroll&&(scroller=currentInstance.scrollElementForEvents)&&scroller.scrollToBeginning()},{passive:!0,capture:!0}),detectCssEnvSupported()),SupportsTranslateProperty=(removeCssVariable(),CSS.supports("translate","40px 100px")),TranslateProperty=SupportsTranslateProperty?"translate":CSS.supports("transform","scale(1)")?"transform":"-webkit-transform";function buildTranslateValue(value){return SupportsTranslateProperty?"0 "+value:"translateY("+value+")"}let topCalcNative=insetsDebug?buildTranslateValue("calc(-100% + var(--env-inset-top, 0))"):buildTranslateValue("calc(-100% + env(safe-area-inset-top, 0))"),topCalc=supportsCssEnv?isNativeAndroid?buildTranslateValue("calc(-100% + var(--window-inset-top, 0))"):topCalcNative:buildTranslateValue("-100%");function setTransformImmediate(elem,classList,value){classList.add("headroom-notransition"),elem.style[TranslateProperty]=value,classList.remove("headroom-notransition")}let DefaultScrollThreshold=Math.max(10*(window.devicePixelRatio||1),20);Headroom.prototype={constructor:Headroom,init:function(){return this.isScrolling=!1,this.attachEvent(),layoutManager.tv&&(this.hideWithAnyScroll=!0),this.hideWithAnyScroll&&(this.enableScrollingStatus=!1),this},pause:function(){this.paused=!0,currentInstance===this&&(currentInstance=null);var elem=this.element;elem&&(this.isScrolling&&elem.classList.remove("headroom-scrolling"),this.isHidden)&&elem.classList.remove("headroom-hidden")},clearTransform:function(){var elem=this.element;elem&&(this.isScrolling&&elem.classList.remove("headroom-scrolling"),this.isHidden)&&elem.classList.remove("headroom-hidden"),this.setTransform(0,this.lastTransformScrollY,!0,!0,!0)},beginResume:function(){this.paused&&this.allowBeginResume&&(this.paused=!1,(currentInstance=this).updateFn(null,!0,!0,!0))},resume:function(){this.paused&&(this.paused=!1,(currentInstance=this).updateFn(null,!0,!0,!1))},destroy:function(){this.lastScrollY=null,this.lastTransformScrollY=null;var scroller=this.scrollElementForEvents;scroller&&(scroller.removeScrollEventListener?scroller.removeScrollEventListener(this.updateFn,{capture:!1,passive:!0}):dom.removeEventListener(scroller,"scroll",this.updateFn,{capture:!1,passive:!0})),this.scrollElementForEvents=null,this.scroller=null,this.element=null},attachEvent:function(){var isNativeScroll=this.scroller.isNativeScroll(),isNativeScroll=(this.isNativeScroll=isNativeScroll,this.updateFn=(isNativeScroll?this.updateWithRequestAnimationFrame:this.update).bind(this),this.lastScrollY=this.scroller.getScrollPosition(),this.allowBeginResume=!isNativeScroll,this.lastTransformScrollY=this.lastScrollY,this.scrollElementForEvents);
|