Advertisement
ArtSemkin

Untitled

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