| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318 |
- (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
- 'use strict';
- /* jshint esversion: 6 */
- (function (v, undefined) {
- 'use strict';
- var StickyHeader = function StickyHeader() {
- var self = this;
- if (!this.setupElements()) {
- return false;
- }
- // rebuild on resize
- window.addEventListener('resize', window.VAMTAM.debounce(function () {
- requestAnimationFrame(function () {
- if (self.active && self.winWidth && window.innerWidth !== self.winWidth) {
- self.destroy();
- requestAnimationFrame(function () {
- self.init();
- });
- }
- });
- }, 100), false);
- // selective refresh support
- if ('undefined' !== typeof wp && wp.customize && wp.customize.selectiveRefresh) {
- wp.customize.selectiveRefresh.bind('partial-content-rendered', function (placement) {
- if (placement.partial.id && ['header-layout-selective', 'header-height'].indexOf(placement.partial.id) !== -1) {
- self.rebuild();
- }
- });
- }
- };
- StickyHeader.prototype.rebuild = function () {
- var self = this;
- requestAnimationFrame(function () {
- self.destroy();
- setTimeout(function () {
- requestAnimationFrame(function () {
- self.setupElements();
- self.init();
- });
- }, 100);
- });
- };
- StickyHeader.prototype.setupElements = function () {
- this.el = {
- hbox: document.getElementsByClassName('fixed-header-box')[0],
- header: document.querySelector('header.main-header'),
- main: document.getElementById('main'),
- topNav: document.getElementsByClassName('top-nav')[0]
- };
- if (!this.el.hbox || !this.el.header || !this.el.main) {
- return false;
- }
- this.prevPos = 0;
- this.el.logoWrapper = this.el.hbox.getElementsByClassName('logo-wrapper')[0];
- this.layout = this.el.header.classList.contains('layout-logo-menu') ? 'single' : this.el.header.classList.contains('layout-overlay-menu') ? 'overlay' : 'double';
- this.typeOver = document.body.classList.contains('sticky-header-type-over');
- return true;
- };
- StickyHeader.prototype.canActivate = function () {
- return !this.active && (document.body.classList.contains('sticky-header') || document.body.classList.contains('had-sticky-header')) && !document.body.classList.contains('fl-builder-active') && !VAMTAM_FRONT.is_mobile && !window.matchMedia('(max-width: ' + VAMTAM_FRONT.mobile_header_breakpoint + ')').matches && !document.body.classList.contains('sticky-header-type-below') && this.el.hbox;
- };
- StickyHeader.prototype.init = function () {
- var _this = this;
- // if we can't activate the sticky header - reset it so that it doesn't overlap anything
- if (!this.canActivate()) {
- if (document.body.classList.contains('sticky-header')) {
- document.body.classList.remove('sticky-header');
- document.body.classList.add('had-sticky-header');
- if (this.el.hbox && this.el.hbox.style.height === '0px') {
- this.el.hbox.style.height = 'auto';
- }
- }
- return;
- }
- // measure
- this.winWidth = window.innerWidth;
- this.hboxWidth = this.el.hbox.offsetWidth;
- this.hboxHeight = this.el.hbox.offsetHeight;
- this.topNavHeight = this.el.topNav ? this.el.topNav.offsetHeight : 0;
- this.logoWrapperHeight = this.el.logoWrapper.offsetHeight;
- this.hboxOffset = v.offset(this.el.hbox);
- this.hboxLeft = this.hboxOffset.left;
- var fillerHeight = this.typeOver ? this.topNavHeight : this.hboxHeight;
- // mutate
- this.el.hboxFiller = this.el.hbox.cloneNode(false);
- Object.assign(this.el.hboxFiller.style, {
- height: fillerHeight + 'px',
- zIndex: 1
- });
- this.el.hboxFiller.classList.add('hbox-filler');
- this.el.hbox.after(this.el.hboxFiller);
- // this.hbox loads with height:0px, so we must first reset the height and then measure it again on the next frame
- Object.assign(this.el.hbox.style, {
- position: this.layout === 'overlay' ? 'fixed' : 'absolute',
- top: v.admin_bar_fix + 'px',
- left: 0,
- width: this.hboxWidth + 'px',
- height: '',
- 'will-change': 'transform',
- transform: 'translateX(' + this.hboxLeft + 'px)'
- });
- requestAnimationFrame(function () {
- _this.hboxHeight = _this.el.hbox.offsetHeight;
- _this.resetBottomEdge = Math.max(_this.hboxHeight, _this.el.header.offsetHeight) + _this.hboxOffset.top;
- _this.active = true;
- });
- if (this.el.topNav) {
- var topNavFiller = document.createElement('div');
- topNavFiller.id = 'top-nav-wrapper-filler';
- topNavFiller.style.height = this.topNavHeight + 'px';
- this.el.hboxFiller.appendChild(topNavFiller);
- }
- };
- StickyHeader.prototype.destroy = function () {
- if (!this.active) {
- return;
- }
- if (this.el.hboxFiller) {
- this.el.hboxFiller.remove();
- }
- Object.assign(this.el.hbox.style, {
- position: '',
- top: '',
- left: '',
- width: '',
- 'will-change': '',
- transform: ''
- });
- // we don't need to add the classes if the sticky header was disabled in the Customizer
- if (document.body.classList.contains('had-sticky-header')) {
- document.body.classList.add('sticky-header');
- document.body.classList.remove('had-sticky-header');
- }
- this.active = false;
- };
- StickyHeader.prototype.measure = function (cpos) {
- if (!this.active) {
- return;
- }
- if (this.layout !== 'overlay') {
- if (!('blockStickyHeaderAnimation' in v) || !v.blockStickyHeaderAnimation) {
- this.direction = this.prevPos === cpos ? '-' : this.prevPos < cpos ? 'down' : 'up';
- if (this.direction === 'up' && this.startScrollingUp === undefined) {
- // first up
- this.startScrollingUp = cpos;
- } else if (this.direction === 'down') {
- // any down - reset up mark
- this.startScrollingUp = undefined;
- }
- if (this.direction === 'down' && this.startScrollingDown === undefined) {
- // first down
- this.startScrollingDown = cpos;
- } else if (this.direction === 'up') {
- // any up - reset down mark
- this.startScrollingDown = undefined;
- }
- this.prevPos = cpos;
- }
- } else {}
- };
- StickyHeader.prototype.mutate = function (cpos) {
- if (!this.active) {
- return;
- }
- if (this.layout !== 'overlay') {
- if (!document.body.classList.contains('no-sticky-header-animation') && !document.body.classList.contains('no-sticky-header-animation-tmp')) {
- if (cpos < this.resetBottomEdge + 200) {
- // at the top
- this.singleRowReset('fast');
- } else if (this.direction === 'down' && (cpos - this.startScrollingDown > 30 || cpos < this.resetBottomEdge * 2)) {
- // reset header position to absolute scrolling down
- this.singleRowReset('slow');
- } else if (this.direction === 'up' && (this.startScrollingUp - cpos > 30 || cpos < this.resetBottomEdge * 2)) {
- // scrolling up - show header
- this.singleRowStick();
- }
- } else if (document.body.classList.contains('no-sticky-header-animation')) {
- // the header should always be in its "scrolled up" state
- Object.assign(this.el.hbox.style, {
- position: 'fixed',
- top: v.admin_bar_fix + 'px',
- transform: ''
- });
- this.el.hbox.classList.toggle('sticky-header-state-stuck', cpos > 0);
- this.el.hbox.classList.toggle('sticky-header-state-reset', cpos <= 0);
- }
- } else {
- this.el.hbox.classList.toggle('sticky-header-state-stuck', cpos > 0);
- this.el.hbox.classList.toggle('sticky-header-state-reset', cpos <= 0);
- }
- document.body.classList.toggle('vamtam-scrolled', cpos > 0);
- };
- StickyHeader.prototype.singleRowReset = function (speed) {
- speed = speed || 'fast';
- if (!this.active || this.singleRowResetStarted) {
- return;
- }
- this.singleRowResetStarted = true;
- var true_reset = function () {
- vamtamgs.TweenLite.set(this.el.hbox, {
- position: 'absolute',
- y: 0,
- x: this.hboxLeft
- });
- this.el.hbox.classList.add('sticky-header-state-reset');
- this.el.hbox.classList.remove('sticky-header-state-stuck');
- this.singleRowResetStarted = false;
- }.bind(this);
- window.vamtam_greensock_wait(function () {
- vamtamgs.TweenLite.killTweensOf(this.el.hbox);
- if (speed === 'fast') {
- true_reset();
- } else if (speed === 'slow') {
- vamtamgs.TweenLite.to(this.el.hbox, 0.15, {
- y: -this.hboxHeight,
- ease: vamtamgs.Power4.easeOut,
- onComplete: true_reset
- });
- }
- }.bind(this));
- };
- StickyHeader.prototype.singleRowStick = function () {
- // it is possible that singleRowStick may be called during a "reset"
- // make sure to only stick the header if this.singleRowResetStarted === false
- if (!this.active || this.el.hbox.classList.contains('sticky-header-state-stuck') || this.singleRowResetStarted) {
- return;
- }
- this.el.hbox.classList.add('sticky-header-state-stuck');
- this.el.hbox.classList.remove('sticky-header-state-reset');
- window.vamtam_greensock_wait(function () {
- vamtamgs.TweenLite.killTweensOf(this.el.hbox);
- vamtamgs.TweenLite.fromTo(this.el.hbox, 0.2, {
- position: 'fixed',
- top: v.admin_bar_fix,
- y: -this.hboxHeight,
- x: this.hboxOffset.left
- }, {
- y: -this.topNavHeight - (this.layout === 'double' ? this.logoWrapperHeight : 0),
- ease: vamtamgs.Power4.easeOut
- });
- }.bind(this));
- };
- document.addEventListener('DOMContentLoaded', function () {
- v.stickyHeader = new StickyHeader();
- vamtam_greensock_wait(function () {
- v.addScrollHandler(v.stickyHeader);
- });
- });
- })(window.VAMTAM);
- },{}]},{},[1]);
|