delagarde

Tattoo Video Page - Javascript Good Single Slider Type

May 18th, 2025
30
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.94 KB | None | 0 0
  1. <script>
  2. document.addEventListener('DOMContentLoaded', function () {
  3.  
  4. let userInteracted = false; // Track if user interacted with slider
  5.  
  6. // Pause and mute all videos except active one on load to prevent autoplay issues
  7. function pauseAllVideos(swiper) {
  8. swiper.slides.forEach((slideEl, index) => {
  9. const video = slideEl.querySelector('video');
  10. if (video) {
  11. if (index === swiper.activeIndex) {
  12. video.pause();
  13. video.muted = false; // Unmute active video
  14. video.setAttribute('controls', ''); // Show controls on active video
  15. } else {
  16. video.pause();
  17. video.muted = true; // Mute inactive videos
  18. video.removeAttribute('controls');
  19. }
  20. }
  21. });
  22. }
  23.  
  24. // Play active slide video and pause others
  25. function playActiveVideo(swiper) {
  26. swiper.slides.forEach((slideEl, index) => {
  27. const video = slideEl.querySelector('video');
  28. if (video) {
  29. if (index === swiper.activeIndex) {
  30. video.muted = false; // Unmute active video
  31. video.setAttribute('controls', '');
  32. video.play().catch(() => {
  33. // Ignore play failures (autoplay blocked)
  34. });
  35. } else {
  36. video.pause();
  37. video.muted = true; // Mute inactive videos
  38. video.removeAttribute('controls');
  39. }
  40. }
  41. });
  42. }
  43.  
  44. // Set up each slider instance
  45. const allSliderWrappers = document.querySelectorAll('.nlb-video-slider-wrapper');
  46.  
  47. allSliderWrappers.forEach((sliderWrapper) => {
  48. const swiperContainer = sliderWrapper.querySelector('.nlb-video-swiper');
  49. if (!swiperContainer) return;
  50.  
  51. const paginationElement = sliderWrapper.querySelector('.nlb-video-pagination');
  52. const nextButton = swiperContainer.querySelector('.swiper-button-next');
  53. const prevButton = swiperContainer.querySelector('.swiper-button-prev');
  54. const swiperSlides = swiperContainer.querySelectorAll('.swiper-wrapper .swiper-slide');
  55. const initialSlideIndex = Math.max(0, Math.ceil(swiperSlides.length / 2) - 1);
  56.  
  57. // Init Swiper
  58. const swiper = new Swiper(swiperContainer, {
  59. effect: 'cards',
  60. grabCursor: true,
  61. loop: false,
  62. rewind: true,
  63. slidesPerView: 'auto',
  64. centeredSlides: true,
  65. initialSlide: initialSlideIndex,
  66. watchSlidesProgress: true,
  67. cardsEffect: {
  68. slideShadows: false,
  69. perSlideRotate: 4,
  70. perSlideOffset: 32
  71. },
  72. navigation: {
  73. nextEl: nextButton,
  74. prevEl: prevButton
  75. },
  76. pagination: {
  77. el: paginationElement,
  78. clickable: true,
  79. renderBullet: function (index, className) {
  80. let posterUrl = '';
  81. const slide = this.slides[index];
  82. if (slide) {
  83. const video = slide.querySelector('video');
  84. if (video && video.hasAttribute('poster')) {
  85. posterUrl = video.getAttribute('poster');
  86. }
  87. }
  88. return `<div class="${className}"><img src="${posterUrl}" alt="Thumbnail ${index + 1}"></div>`;
  89. }
  90. },
  91. on: {
  92. init: function (swiper) {
  93. pauseAllVideos(swiper);
  94. },
  95. slideChange: function (swiper) {
  96. if (!userInteracted) {
  97. userInteracted = true;
  98. }
  99. if (userInteracted) {
  100. playActiveVideo(swiper);
  101. }
  102. },
  103. click: function (swiper, event) {
  104. const clickedElement = event.target;
  105. if (clickedElement.classList.contains('swiper-video-drag-overlay')) {
  106. const activeSlide = swiper.slides[swiper.activeIndex];
  107. if (!activeSlide) return;
  108. const video = activeSlide.querySelector('video');
  109. if (!video) return;
  110.  
  111. if (video.paused) {
  112. video.play().catch(() => {});
  113. } else {
  114. video.pause();
  115. }
  116. }
  117. }
  118. }
  119. });
  120.  
  121. // Pause all videos on initial load explicitly
  122. pauseAllVideos(swiper);
  123. });
  124. });
  125. </script>
  126.  
Advertisement
Add Comment
Please, Sign In to add comment