Advertisement
ArtSemkin

Untitled

Jun 11th, 2020
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var SliderHalfScreen = function ($slider) {
  2.  
  3.     if (!$slider.length) {
  4.         return;
  5.     }
  6.  
  7.     var
  8.         $heading = $slider.find('h2'),
  9.         $description = $slider.find('p'),
  10.         $link = $slider.find('.slider-halfscreen__wrapper-link'),
  11.         tl = new TimelineMax(),
  12.         $sliderImg = $slider.find('.js-slider-halfscreen__images'),
  13.         $sliderContent = $slider.find('.js-slider-halfscreen__content'),
  14.         overlapFactor = $sliderImg.data('overlap-factor') || 0;
  15.  
  16.     createSliders();
  17.     hoverLinks();
  18.  
  19.     function createSliders() {
  20.  
  21.         var sliderImg = new Swiper($sliderImg, {
  22.             autoplay: {
  23.                 enabled: $sliderImg.data('autoplay-enabled') || false,
  24.                 delay: $sliderImg.data('autoplay-delay') || 6000,
  25.                 disableOnInteraction: true
  26.             },
  27.             direction: 'vertical',
  28.             preloadImages: true,
  29.             lazy: {
  30.                 loadPrevNext: true,
  31.                 loadOnTransitionStart: true
  32.             },
  33.             speed: $sliderImg.data('speed') || 1200,
  34.             simulateTouch: false,
  35.             allowTouchMove: true,
  36.             watchSlidesProgress: true,
  37.             on: {
  38.                 progress: function () {
  39.                     var swiper = this;
  40.                     for (var i = 0; i < swiper.slides.length; i++) {
  41.  
  42.                         var slideProgress = swiper.slides[i].progress,
  43.                             innerOffset = swiper.width * overlapFactor,
  44.                             innerTranslate = slideProgress * innerOffset;
  45.  
  46.                         try {
  47.                             TweenMax.set(swiper.slides[i].querySelector('.slider-halfscreen__bg'), {
  48.                                 y: innerTranslate + 'px',
  49.                                 transition: swiper.params.speed + 'ms',
  50.                                 rotationZ: 0.01,
  51.                                 force3D: true
  52.                             });
  53.                         } catch (error) {
  54.  
  55.                         }
  56.  
  57.                     }
  58.                 },
  59.                 touchStart: function () {
  60.                     var swiper = this;
  61.                     for (var i = 0; i < swiper.slides.length; i++) {
  62.                         try {
  63.                             TweenMax.set(swiper.slides[i].querySelector('.slider-halfscreen__bg'), {
  64.                                 transition: '',
  65.                                 rotationZ: 0.01,
  66.                                 force3D: true
  67.                             });
  68.                         } catch (error) {
  69.  
  70.                         }
  71.  
  72.                     }
  73.                 },
  74.             }
  75.         });
  76.  
  77.         var sliderContent = new Swiper($sliderContent, {
  78.             simulateTouch: false,
  79.             direction: 'vertical',
  80.             effect: 'fade',
  81.             fadeEffect: {
  82.                 crossFade: true
  83.             },
  84.             mousewheel: {
  85.                 eventsTarged: '.page-wrapper',
  86.                 releaseOnEdges: true,
  87.             },
  88.             keyboard: {
  89.                 enabled: true
  90.             },
  91.             navigation: {
  92.                 nextEl: '.js-slider-halfscreen__next',
  93.                 prevEl: '.js-slider-halfscreen__prev',
  94.             },
  95.             speed: $sliderImg.data('speed') || 1200,
  96.             allowTouchMove: true,
  97.             breakpoints: {
  98.                 992: {
  99.                     autoHeight: true
  100.                 }
  101.             }
  102.         });
  103.  
  104.         sliderContent.update();
  105.  
  106.         sliderContent.on('slideChange', () => {
  107.  
  108.             if (sliderContent.realIndex > sliderContent.previousIndex) {
  109.                 slideChangeTransition('next');
  110.             }
  111.  
  112.             if (sliderContent.realIndex < sliderContent.previousIndex) {
  113.                 slideChangeTransition('prev');
  114.             }
  115.  
  116.         });
  117.  
  118.         function slideChangeTransition(direction = 'next') {
  119.  
  120.             var
  121.                 $activeSlide = $(sliderContent.slides[sliderContent.realIndex]),
  122.                 $activeHeading = $activeSlide.find($heading),
  123.                 $activeLink = $activeSlide.find($link),
  124.                 $activeDescription = $activeSlide.find($description);
  125.  
  126.             tl.clear();
  127.  
  128.             $heading.each(function () {
  129.                 tl
  130.                     .add(hideWords($(this), 0.3, 0.02, direction === 'next' ? '50px' : '-50px', direction === 'next' ? true : false), '0')
  131.                     .add(hideWords($heading, '0', '0', direction === 'next' ? '-50px' : '50px'));
  132.             });
  133.  
  134.             $description.each(function () {
  135.                 tl.add(hideLines($(this), 0.6, 0.01, '100%', true), '0');
  136.             });
  137.  
  138.             $link.each(function () {
  139.                 tl.to($(this), 0.6, {
  140.                     y: '15px',
  141.                     autoAlpha: 0
  142.                 }, '0');
  143.             });
  144.  
  145.             tl
  146.                 .add(animateWords($activeHeading, 1.2, 0.02, direction === 'next' ? true : false))
  147.                 .add(animateLines($activeDescription, 1.2, 0.01, direction === 'next' ? true : false), '-=1.2')
  148.                 .to($activeLink, 0.6, {
  149.                     y: '0px',
  150.                     autoAlpha: 1
  151.                 }, '-=1.2');
  152.  
  153.         }
  154.  
  155.         sliderImg.controller.control = sliderContent;
  156.         sliderContent.controller.control = sliderImg;
  157.  
  158.     }
  159.  
  160.     function hoverLinks() {
  161.  
  162.         $document
  163.             .on('mouseenter touchstart', '.slider-halfscreen__link', function () {
  164.  
  165.                 var $targetBackground = $sliderImg.find('.swiper-slide-active .slider-halfscreen__images-slide-inner'),
  166.                     $linkLine = $sliderContent.find('.swiper-slide-active .slider-halfscreen__link-line');
  167.  
  168.                 if (!$targetBackground.length) {
  169.                     return;
  170.                 }
  171.  
  172.                 TweenMax.to($targetBackground, 0.6, {
  173.                     scale: 1.05,
  174.                     ease: Expo.easeInOut
  175.                 });
  176.  
  177.                 TweenMax.to($linkLine, 0.6, {
  178.                     width: '70px',
  179.                     ease: Expo.easeInOut
  180.                 });
  181.  
  182.             })
  183.             .on('mouseleave touchend', '.slider-halfscreen__link', function () {
  184.  
  185.                 var $targetBackground = $sliderImg.find('.swiper-slide-active .slider-halfscreen__images-slide-inner'),
  186.                     $linkLine = $sliderContent.find('.swiper-slide-active .slider-halfscreen__link-line');
  187.  
  188.                 if (!$targetBackground.length) {
  189.                     return;
  190.                 }
  191.  
  192.                 TweenMax.to($targetBackground, 0.6, {
  193.                     scale: 1,
  194.                     ease: Expo.easeInOut
  195.                 });
  196.  
  197.                 TweenMax.to($linkLine, 0.6, {
  198.                     width: '60px',
  199.                     ease: Expo.easeInOut
  200.                 });
  201.  
  202.             });
  203.  
  204.     }
  205.  
  206. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement