/* * jQuery sticky box plugin */ !function(t,i){"use strict";function s(t,i){this.options=i,this.$stickyBox=t,this.init()}var o={init:function(){this.findElements(),this.attachEvents(),this.makeCallback("onInit")},findElements:function(){this.$container=this.$stickyBox.closest(this.options.container),this.isWrap="fixed"===this.options.positionType&&this.options.setBoxHeight,this.moveInContainer=!!this.$container.length,this.isWrap&&(this.$stickyBoxWrap=this.$stickyBox.wrap('
').parent()),this.parentForActive=this.getParentForActive(),this.isInit=!0},attachEvents:function(){var t=this;this.onResize=function(){t.isInit&&(t.resetState(),t.recalculateOffsets(),t.checkStickyPermission(),t.scrollHandler())},this.onScroll=function(){t.scrollHandler()},this.onResize(),i.on("load resize orientationchange",this.onResize).on("scroll",this.onScroll)},defineExtraTop:function(){var t;"number"==typeof this.options.extraTop?t=this.options.extraTop:"function"==typeof this.options.extraTop&&(t=this.options.extraTop()),this.extraTop="absolute"===this.options.positionType?t:Math.min(this.winParams.height-this.data.boxFullHeight,t)},checkStickyPermission:function(){this.isStickyEnabled=!this.moveInContainer||this.data.containerOffsetTop+this.data.containerHeight>this.data.boxFullHeight+this.data.boxOffsetTop+this.options.extraBottom},getParentForActive:function(){return this.isWrap?this.$stickyBoxWrap:this.$container.length?this.$container:this.$stickyBox},getWrapClass:function(){try{return this.$stickyBox.attr("class").split(" ").map(function(t){return"sticky-wrap-"+t}).join(" ")}catch(t){return"sticky-wrap"}},resetState:function(){this.stickyFlag=!1,this.$stickyBox.css({"-webkit-transition":"","-webkit-transform":"",transition:"",transform:"",position:"",width:"",left:"",top:""}).removeClass(this.options.activeClass),this.isWrap&&this.$stickyBoxWrap.removeClass(this.options.activeClass).removeAttr("style"),this.moveInContainer&&this.$container.removeClass(this.options.activeClass)},recalculateOffsets:function(){this.winParams=this.getWindowParams(),this.data=t.extend(this.getBoxOffsets(),this.getContainerOffsets()),this.defineExtraTop()},getBoxOffsets:function(){var t,i="fixed"===this.$stickyBox.css("position")?((t=this.$stickyBox.offset()).top=0,t):this.$stickyBox.offset(),s=this.$stickyBox.position();return{boxOffsetLeft:i.left,boxOffsetTop:i.top,boxTopPosition:s.top,boxLeftPosition:s.left,boxFullHeight:this.$stickyBox.outerHeight(!0),boxHeight:this.$stickyBox.outerHeight(),boxWidth:this.$stickyBox.outerWidth()}},getContainerOffsets:function(){var t=this.moveInContainer?this.$container.offset():null;return t?{containerOffsetLeft:t.left,containerOffsetTop:t.top,containerHeight:this.$container.outerHeight()}:{}},getWindowParams:function(){return{height:window.innerHeight||document.documentElement.clientHeight}},makeCallback:function(t){if("function"==typeof this.options[t]){var i=Array.prototype.slice.call(arguments);i.shift(),this.options[t].apply(this,i)}},destroy:function(){this.isInit=!1,i.off("load resize orientationchange",this.onResize).off("scroll",this.onScroll),this.resetState(),this.$stickyBox.removeData("StickyScrollBlock"),this.isWrap&&this.$stickyBox.unwrap(),this.makeCallback("onDestroy")}},e={fixed:{scrollHandler:function(){this.winScrollTop=i.scrollTop(),this.winScrollTop-(this.options.showAfterScrolled?this.extraTop:0)-(this.options.showAfterScrolled?this.data.boxHeight+this.extraTop:0)>this.data.boxOffsetTop-this.extraTop?this.isStickyEnabled&&this.stickyOn():this.stickyOff()},stickyOn:function(){this.stickyFlag||(this.stickyFlag=!0,this.parentForActive.addClass(this.options.activeClass),this.$stickyBox.css({width:this.data.boxWidth,position:this.options.positionType}),this.isWrap&&this.$stickyBoxWrap.css({height:this.data.boxFullHeight}),this.makeCallback("fixedOn")),this.setDynamicPosition()},stickyOff:function(){this.stickyFlag&&(this.stickyFlag=!1,this.resetState(),this.makeCallback("fixedOff"))},setDynamicPosition:function(){this.$stickyBox.css({top:this.getTopPosition(),left:this.data.boxOffsetLeft-i.scrollLeft()})},getTopPosition:function(){if(this.moveInContainer){var t=this.winScrollTop+this.data.boxHeight+this.options.extraBottom;return Math.min(this.extraTop,this.data.containerHeight+this.data.containerOffsetTop-t)}return this.extraTop}},absolute:{scrollHandler:function(){this.winScrollTop=i.scrollTop(),this.winScrollTop>this.data.boxOffsetTop-this.extraTop?this.isStickyEnabled&&this.stickyOn():this.stickyOff()},stickyOn:function(){this.stickyFlag||(this.stickyFlag=!0,this.parentForActive.addClass(this.options.activeClass),this.$stickyBox.css({width:this.data.boxWidth,transition:"transform "+this.options.animSpeed+"s ease","-webkit-transition":"transform "+this.options.animSpeed+"s ease"}),this.isWrap&&this.$stickyBoxWrap.css({height:this.data.boxFullHeight}),this.makeCallback("fixedOn")),this.clearTimer(),this.timer=setTimeout(function(){this.setDynamicPosition()}.bind(this),1e3*this.options.animDelay)},stickyOff:function(){this.stickyFlag&&(this.clearTimer(),this.stickyFlag=!1,this.timer=setTimeout(function(){this.setDynamicPosition(),setTimeout(function(){this.resetState()}.bind(this),1e3*this.options.animSpeed)}.bind(this),1e3*this.options.animDelay),this.makeCallback("fixedOff"))},clearTimer:function(){clearTimeout(this.timer)},setDynamicPosition:function(){var t=Math.max(0,this.getTopPosition());this.$stickyBox.css({transform:"translateY("+t+"px)","-webkit-transform":"translateY("+t+"px)"})},getTopPosition:function(){var t=this.winScrollTop-this.data.boxOffsetTop+this.extraTop;if(this.moveInContainer){var i=this.winScrollTop+this.data.boxHeight+this.options.extraBottom;return t-Math.abs(Math.min(0,this.data.containerHeight+this.data.containerOffsetTop-i-this.extraTop))}return t}}};t.fn.stickyScrollBlock=function(i){var n=Array.prototype.slice.call(arguments),a=n[0],h=t.extend({container:null,positionType:"fixed",activeClass:"fixed-position",setBoxHeight:!0,showAfterScrolled:!1,extraTop:0,extraBottom:0,animDelay:.1,animSpeed:.2},i);return this.each(function(){var r=jQuery(this),c=r.data("StickyScrollBlock");"object"==typeof i||void 0===i?(s.prototype=t.extend(e[h.positionType],o),r.data("StickyScrollBlock",new s(r,h))):"string"==typeof a&&c&&"function"==typeof c[a]&&(n.shift(),c[a].apply(c,n))})},window.StickyScrollBlock=s}(jQuery,jQuery(window));