Нема описа
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

front-page-landing.js 4.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. /**
  2. * Main - Front Pages
  3. */
  4. 'use strict';
  5. (function () {
  6. const nav = document.querySelector('.layout-navbar'),
  7. heroAnimation = document.getElementById('hero-animation'),
  8. animationImg = document.querySelectorAll('.hero-dashboard-img'),
  9. animationElements = document.querySelectorAll('.hero-elements-img'),
  10. swiperLogos = document.getElementById('swiper-clients-logos'),
  11. swiperReviews = document.getElementById('swiper-reviews'),
  12. ReviewsPreviousBtn = document.getElementById('reviews-previous-btn'),
  13. ReviewsNextBtn = document.getElementById('reviews-next-btn'),
  14. ReviewsSliderPrev = document.querySelector('.swiper-button-prev'),
  15. ReviewsSliderNext = document.querySelector('.swiper-button-next'),
  16. priceDurationToggler = document.querySelector('.price-duration-toggler'),
  17. priceMonthlyList = [].slice.call(document.querySelectorAll('.price-monthly')),
  18. priceYearlyList = [].slice.call(document.querySelectorAll('.price-yearly'));
  19. // Hero
  20. const mediaQueryXL = '1200';
  21. const width = screen.width;
  22. if (width >= mediaQueryXL && heroAnimation) {
  23. heroAnimation.addEventListener('mousemove', function parallax(e) {
  24. animationElements.forEach(layer => {
  25. layer.style.transform = 'translateZ(1rem)';
  26. });
  27. animationImg.forEach(layer => {
  28. let x = (window.innerWidth - e.pageX * 2) / 100;
  29. let y = (window.innerHeight - e.pageY * 2) / 100;
  30. layer.style.transform = `perspective(1200px) rotateX(${y}deg) rotateY(${x}deg) scale3d(1, 1, 1)`;
  31. });
  32. });
  33. nav.addEventListener('mousemove', function parallax(e) {
  34. animationElements.forEach(layer => {
  35. layer.style.transform = 'translateZ(1rem)';
  36. });
  37. animationImg.forEach(layer => {
  38. let x = (window.innerWidth - e.pageX * 2) / 100;
  39. let y = (window.innerHeight - e.pageY * 2) / 100;
  40. layer.style.transform = `perspective(1200px) rotateX(${y}deg) rotateY(${x}deg) scale3d(1, 1, 1)`;
  41. });
  42. });
  43. heroAnimation.addEventListener('mouseout', function () {
  44. animationElements.forEach(layer => {
  45. layer.style.transform = 'translateZ(0)';
  46. });
  47. animationImg.forEach(layer => {
  48. layer.style.transform = 'perspective(1200px) scale(1) rotateX(0) rotateY(0)';
  49. });
  50. });
  51. }
  52. // swiper carousel
  53. // Customers reviews
  54. // -----------------------------------
  55. if (swiperReviews) {
  56. new Swiper(swiperReviews, {
  57. slidesPerView: 1,
  58. spaceBetween: 5,
  59. grabCursor: true,
  60. autoplay: {
  61. delay: 3000,
  62. disableOnInteraction: false
  63. },
  64. loop: true,
  65. loopAdditionalSlides: 1,
  66. navigation: {
  67. nextEl: '.swiper-button-next',
  68. prevEl: '.swiper-button-prev'
  69. },
  70. breakpoints: {
  71. 1200: {
  72. slidesPerView: 3,
  73. spaceBetween: 26
  74. },
  75. 992: {
  76. slidesPerView: 2,
  77. spaceBetween: 20
  78. }
  79. }
  80. });
  81. }
  82. // Reviews slider next and previous
  83. // -----------------------------------
  84. // Add click event listener to next button
  85. ReviewsNextBtn.addEventListener('click', function () {
  86. ReviewsSliderNext.click();
  87. });
  88. ReviewsPreviousBtn.addEventListener('click', function () {
  89. ReviewsSliderPrev.click();
  90. });
  91. // Review client logo
  92. // -----------------------------------
  93. if (swiperLogos) {
  94. new Swiper(swiperLogos, {
  95. slidesPerView: 2,
  96. autoplay: {
  97. delay: 3000,
  98. disableOnInteraction: false
  99. },
  100. breakpoints: {
  101. 992: {
  102. slidesPerView: 5
  103. },
  104. 768: {
  105. slidesPerView: 3
  106. }
  107. }
  108. });
  109. }
  110. // Pricing Plans
  111. // -----------------------------------
  112. document.addEventListener('DOMContentLoaded', function (event) {
  113. function togglePrice() {
  114. if (priceDurationToggler.checked) {
  115. // If checked
  116. priceYearlyList.map(function (yearEl) {
  117. yearEl.classList.remove('d-none');
  118. });
  119. priceMonthlyList.map(function (monthEl) {
  120. monthEl.classList.add('d-none');
  121. });
  122. } else {
  123. // If not checked
  124. priceYearlyList.map(function (yearEl) {
  125. yearEl.classList.add('d-none');
  126. });
  127. priceMonthlyList.map(function (monthEl) {
  128. monthEl.classList.remove('d-none');
  129. });
  130. }
  131. }
  132. // togglePrice Event Listener
  133. togglePrice();
  134. priceDurationToggler.onchange = function () {
  135. togglePrice();
  136. };
  137. });
  138. })();