Advertisement
ArtSemkin

Untitled

Sep 23rd, 2019
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var Header = function () {
  2.  
  3.     var $overlay = $('.header__wrapper-overlay-menu');
  4.  
  5.     this.hideOverlayMenu = function (speed, setMenu) {
  6.  
  7.         return closeOverlayMenu(speed, setMenu);
  8.  
  9.     };
  10.  
  11.     if (!$overlay.length) {
  12.         return;
  13.     }
  14.  
  15.     var
  16.         $stickyHeader = $('.js-sticky-header'),
  17.         $burger = $('#js-burger'),
  18.         $menuLinks = $overlay.find('.menu-overlay > li > a'),
  19.         $allLinks = $overlay.find('a'),
  20.         $submenu = $overlay.find('.menu-overlay .sub-menu'),
  21.         $submenuButton = $('#js-submenu-back'),
  22.         $submenuLinks = $submenu.find('> li > a'),
  23.         $overlayWidgets = $overlay.find('.header__wrapper-overlay-widgets'),
  24.         $social = $overlayWidgets.find('.social'),
  25.         $headerLeft = $('.header__col-left'),
  26.         $headerRight = $('.header__col-right'),
  27.         $langSwitcher = $('.lang-switcher'),
  28.         $curtain = $('.header__curtain'),
  29.         $circleLetters = $('.header__circle-letters'),
  30.         $widgetListElements = $('.header__wrapper-overlay-widgets ul li'),
  31.         OPEN_CLASS = 'header__burger_opened',
  32.         STICKY_CLASS = 'header_sticky',
  33.         STICKY_THEME = $stickyHeader.attr('data-header-sticky-theme');
  34.  
  35.     clickBurger();
  36.     setOverlayMenu();
  37.     stickHeader();
  38.  
  39.     function stickHeader() {
  40.  
  41.         if (!$stickyHeader.length) {
  42.             return;
  43.         }
  44.  
  45.         if (window.SB === undefined) {
  46.  
  47.             window.stickyScene = new $.ScrollMagic.Scene({
  48.                     offset: '1px',
  49.                 })
  50.                 .setClassToggle($stickyHeader, STICKY_CLASS + ' ' + STICKY_THEME)
  51.                 .addTo(SMController);
  52.  
  53.         } else {
  54.  
  55.             window.SB.addListener(changeHeaderClass);
  56.  
  57.         }
  58.  
  59.     }
  60.  
  61.     function unstickHeader() {
  62.  
  63.         if (!$stickyHeader.length) {
  64.             return;
  65.         }
  66.  
  67.         if (window.SB === undefined) {
  68.  
  69.             if (window.stickyScene) {
  70.  
  71.                 window.stickyScene.destroy(true);
  72.                 $stickyHeader.removeClass(STICKY_CLASS);
  73.  
  74.             }
  75.  
  76.         } else {
  77.  
  78.             window.SB.removeListener(changeHeaderClass);
  79.             $stickyHeader.removeClass(STICKY_CLASS);
  80.  
  81.         }
  82.  
  83.     }
  84.  
  85.     function changeHeaderClass() {
  86.  
  87.         if (window.SB.offset.y >= 1) {
  88.             $stickyHeader.addClass(STICKY_CLASS).addClass(STICKY_THEME);
  89.         } else {
  90.             $stickyHeader.removeClass(STICKY_CLASS).removeClass(STICKY_THEME);
  91.         }
  92.  
  93.     }
  94.  
  95.     function setOverlayMenu() {
  96.  
  97.         getScrollTop();
  98.  
  99.         TweenMax.set($overlay, {
  100.             autoAlpha: 0,
  101.             className: '-=opened',
  102.         });
  103.  
  104.         TweenMax.set([$submenu, $submenuButton], {
  105.             autoAlpha: 0
  106.         });
  107.  
  108.         TweenMax.set($submenu, {
  109.             className: '-=opened'
  110.         });
  111.  
  112.         TweenMax.set($curtain, {
  113.             y: '-110%',
  114.         });
  115.  
  116.         TweenMax.set($circleLetters, {
  117.             autoAlpha: 0
  118.         });
  119.  
  120.         TweenMax.set($menuLinks.find('.split-text__line'), {
  121.             y: '100%',
  122.             autoAlpha: 0
  123.         });
  124.  
  125.         TweenMax.set($menuLinks.find('.split-text__char'), {
  126.             clearProps: 'transform',
  127.             autoAlpha: 1
  128.         });
  129.  
  130.         setLines($overlayWidgets);
  131.  
  132.         TweenMax.set($social, {
  133.             autoAlpha: 0,
  134.             y: '100%'
  135.         });
  136.  
  137.         TweenMax.set($submenuLinks.find('.split-text__line'), {
  138.             clearProps: 'transform',
  139.             autoAlpha: 1
  140.         });
  141.  
  142.         TweenMax.set($submenuLinks.find('.split-text__char'), {
  143.             x: '50px',
  144.             autoAlpha: 0
  145.         });
  146.  
  147.         TweenMax.set($widgetListElements, {
  148.             autoAlpha: 0,
  149.             y: '50px'
  150.         });
  151.  
  152.         $allLinks.removeClass('selected');
  153.  
  154.     };
  155.  
  156.     function openOverlayMenu() {
  157.  
  158.         var
  159.             tl = new TimelineMax(),
  160.             $pageContent = $('.page-wrapper__content');
  161.  
  162.         // adjust animation menu master speed
  163.         if (window.theme !== 'undefined') {
  164.  
  165.             var scale = window.theme.animations.timeScale.overlayMenuOpen || 1;
  166.             tl.timeScale(scale);
  167.  
  168.         }
  169.  
  170.         tl
  171.             .set($overlay, {
  172.                 autoAlpha: 1,
  173.                 zIndex: 500
  174.             }, '0')
  175.             .add(function () {
  176.                 window.$pageHeader.attr('data-header-animation', 'intransition');
  177.                 getScrollTop();
  178.             })
  179.             .set($overlay, {
  180.                 className: '+=opened'
  181.             })
  182.             .to($curtain, 1.2, {
  183.                 y: '0%',
  184.                 ease: Expo.easeInOut,
  185.             })
  186.             .to($pageContent, 1.2, {
  187.                 y: '10vh',
  188.                 force3D: true,
  189.                 ease: Expo.easeInOut
  190.             }, '-=1.2')
  191.             .add(animateLines($menuLinks, 1.2, 0.05), '-=0.6')
  192.             .staggerTo($widgetListElements, 0.6, {
  193.                 autoAlpha: 1,
  194.                 y: '0px'
  195.             }, 0.03, '-=1.2')
  196.             .add(animateLines($overlayWidgets, 1.2, 0.05), '-=1.2')
  197.             .to($social, 0.6, {
  198.                 autoAlpha: 1,
  199.                 y: '0%'
  200.             }, '-=1.2')
  201.             .to($circleLetters, 1.2, {
  202.                 autoAlpha: 1,
  203.             }, '-=1.2')
  204.             .to([$headerLeft, $langSwitcher, $headerRight], 1.2, {
  205.                 x: '30px',
  206.                 autoAlpha: 0,
  207.                 ease: Expo.easeInOut
  208.             }, '0')
  209.             ///////////////////////////////////////
  210.             .to($pageContent, 0.3, {
  211.                 autoAlpha: 0,
  212.                 // display: 'none'
  213.             })
  214.             ///////////////////////////////////////
  215.             .add(function () {
  216.                 unstickHeader();
  217.             }, '0.6')
  218.             .add(function () {
  219.                 lockScroll(true);
  220.             }, '1.2')
  221.             .add(function () {
  222.                 window.$pageHeader.attr('data-header-animation', '');
  223.             });
  224.  
  225.     };
  226.  
  227.     function closeOverlayMenu(speed, setMenu = true) {
  228.  
  229.         var
  230.             tl = new TimelineMax(),
  231.             $pageContent,
  232.             $submenuLinksCurrent;
  233.  
  234.         if (!$overlay.hasClass('opened')) {
  235.             return tl;
  236.         }
  237.  
  238.         $pageContent = $('.page-wrapper__content');
  239.         $submenuLinksCurrent = $submenu.filter('.opened').find($submenuLinks);
  240.  
  241.         // adjust animation menu master speed
  242.         if (window.theme !== 'undefined' && !speed) {
  243.  
  244.             var scale = window.theme.animations.timeScale.overlayMenuClose || 1;
  245.             tl.timeScale(scale);
  246.  
  247.         } else {
  248.  
  249.             tl.timeScale(speed);
  250.  
  251.         }
  252.  
  253.         tl
  254.             .set($overlay, {
  255.                 zIndex: 500
  256.             })
  257.             .add(function () {
  258.                 window.$pageHeader.attr('data-header-animation', 'intransition');
  259.             })
  260.             .add(function () {
  261.  
  262.                 restoreScrollTop();
  263.                 stickHeader();
  264.  
  265.                 if (typeof window.SB !== 'undefined' && window.SB.offset.y >= 1) {
  266.                     $stickyHeader.addClass(STICKY_CLASS);
  267.                 }
  268.  
  269.                 if (setMenu === true) {
  270.                     lockScroll(false);
  271.                 }
  272.  
  273.             }, '0.6')
  274.             .set($burger, {
  275.                 className: '-=header__burger_opened'
  276.             }, '0')
  277.             .set($pageContent, {
  278.                 y: '5vh',
  279.                 force3D: true
  280.             }, '0')
  281.             .add(hideLines($menuLinks, 1.2, 0.05, '-100%', true), '0')
  282.             .add(hideLines($submenuLinksCurrent, 1.2, 0.05, '-100%', Power3.easeInOut, true), '0')
  283.             .add(hideLines($overlayWidgets, 0.6), '0')
  284.             .to($social, 0.6, {
  285.                 autoAlpha: 0,
  286.                 y: '-100%'
  287.             }, '0')
  288.             .staggerTo($widgetListElements, 0.6, {
  289.                 autoAlpha: 0,
  290.                 y: '-30px'
  291.             }, 0.03, '0')
  292.             .to($circleLetters, 1.2, {
  293.                 autoAlpha: 0,
  294.             }, '0')
  295.             .to($curtain, 1.2, {
  296.                 y: '-110%',
  297.                 ease: Expo.easeInOut
  298.             }, '0.6')
  299.             .to($pageContent, 2.4, {
  300.                 y: '0vh',
  301.                 force3D: true,
  302.                 autoAlpha: 1,
  303.                 ease: Expo.easeInOut,
  304.                 display: 'block'
  305.             }, '0')
  306.             .to($submenuButton, 0.6, {
  307.                 x: '-10px',
  308.                 autoAlpha: 0
  309.             }, '0')
  310.             .staggerFromTo([$headerLeft, $langSwitcher, $headerRight], 2.4, {
  311.                 x: '-50px',
  312.             }, {
  313.                 x: '0px',
  314.                 autoAlpha: 1,
  315.                 ease: Expo.easeInOut
  316.             }, 0.05, '0.4')
  317.             .set($overlay, {
  318.                 className: '-=opened'
  319.             }, '1')
  320.             .add(function () {
  321.                 window.$pageHeader.attr('data-header-animation', '');
  322.                 if (setMenu === true) {
  323.                     setOverlayMenu();
  324.                 }
  325.             });
  326.  
  327.         return tl;
  328.  
  329.     };
  330.  
  331.     function clickBurger() {
  332.  
  333.         $burger.off().on('click', function (e) {
  334.  
  335.             e.preventDefault();
  336.  
  337.             if (window.$pageHeader.attr('data-header-animation') !== 'intransition') {
  338.  
  339.                 if ($burger.hasClass(OPEN_CLASS)) {
  340.                     closeOverlayMenu();
  341.                     $burger.removeClass(OPEN_CLASS);
  342.                 } else {
  343.                     openOverlayMenu();
  344.                     $burger.addClass(OPEN_CLASS);
  345.                 }
  346.  
  347.             }
  348.  
  349.         });
  350.  
  351.     };
  352.  
  353. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement