Guest User

Untitled

a guest
Nov 7th, 2023
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.06 KB | Source Code | 0 0
  1. HTML PART
  2.  
  3. <!DOCTYPE html>
  4. <html lang="en">
  5. <head>
  6. <meta charset="UTF-8">
  7. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  8. <link rel="stylesheet" href="styles.css">
  9. <script type="text/javascript" src="gallery.js" defer></script>
  10. <!-- Use defer for loading gallery if js is in the header -->
  11. <title>new Page v0</title>
  12.  
  13. </head>
  14. <body>
  15.  
  16. <div class="gallery">
  17. <div id="imageContainer">
  18. <img id="currentImage" class="current" src="" alt="currentImage">
  19. <img id="nextImage" class="next" src="" alt="nextImage">
  20. <!-- <script type="text/javascript" src="gallery.js"></script> -->
  21. </div>
  22. </div>
  23. </body>
  24. </html>
  25.  
  26. ----------------------------------
  27.  
  28. CSS PART
  29.  
  30. * {
  31. margin: 0;
  32. padding: 0;
  33. box-sizing: border-box;
  34. /* border: 1px solid red; */
  35. }
  36.  
  37. body {
  38. margin: 0;
  39. }
  40.  
  41. #currentImage, #nextImage {
  42. position: absolute;
  43. width: 100%;
  44. height: auto;
  45. top: 0;
  46. left: 0;
  47. /* opacity: 1;
  48. transition: opacity 1s ease-in-out; */
  49. }
  50.  
  51. #imageContainer {
  52. /* display: flex;
  53. flex-direction: row;
  54. flex-wrap: wrap; */
  55. /* align-items: flex-end;
  56. display: block; */
  57. /* align-items: initial; */
  58. position: relative;
  59. }
  60.  
  61. .current {
  62. opacity: 1;
  63. transition: opacity 2s linear;
  64. }
  65.  
  66. .next {
  67. opacity: 0;
  68. transition: opacity 2s linear;
  69. }
  70.  
  71. .gallery {
  72. /* display: flex;
  73. flex-direction: row;
  74. flex-wrap: wrap; */
  75. justify-content: center;
  76. align-items: center;
  77. /*background-color: darkolivegreen;*/
  78. /* border: 2px solid red */;
  79. width: 100%;
  80. height: 450px;
  81. /* margin: 0 auto 200px; */
  82. margin: 100px auto;
  83. }
  84.  
  85. -------------------------------------
  86.  
  87. Javascript
  88.  
  89.  
  90.  
  91. let imgNamesArray;
  92. let currentIndex = 0;
  93. let previousIndex = -1;
  94. let isCrossfading = false;
  95. const fadeDuration = 1000;
  96.  
  97. let currentImage = document.getElementById('currentImage');
  98. let nextImage = document.getElementById('nextImage');
  99.  
  100. const preloadedImages = [];
  101.  
  102. function preloadImages() {
  103. for (let i = 0; i < imgNamesArray.length; i++) {
  104. const image = new Image();
  105. image.src = `./images/${imgNamesArray[i]}`;
  106. image.onload = () => {
  107. // You can optionally do something when each image is preloaded
  108. };
  109. }
  110. }
  111.  
  112. fetch("gallery.php")
  113. .then(Response => Response.json())
  114. .then(fetchedData => {
  115. // should I do something with imgNames ?
  116. imgNamesArray = fetchedData;
  117. console.log(imgNamesArray);
  118. //const currentImage = document.getElementById('currentImage');
  119. //currentImage.src = `./images/${imgNamesArray[0]}`;
  120. // displayNextImage();
  121.  
  122. preloadImages();
  123.  
  124. const initialIndex = Math.floor(Math.random() * imgNamesArray.length);
  125. const initialImageSrc = `./images/${imgNamesArray[initialIndex]}`;
  126. currentImage.src = initialImageSrc;
  127.  
  128. /* setInterval(() => {
  129. // displayNextImage();
  130. crossfade();
  131. }, 5000); */
  132.  
  133. setInterval(crossfadeII, 5000);
  134.  
  135. })
  136. .catch(error => console.error("Error: ", error));
  137.  
  138.  
  139. function displayNextImage() {
  140. currentIndex = (currentIndex + 1) % imgNamesArray.length;
  141. console.log(currentIndex);
  142. const currentImage = document.getElementById("currentImage");
  143. currentImage.src = `./images/${imgNamesArray[currentIndex]}`;
  144. }
  145.  
  146. function crossfadeII() {
  147.  
  148. let newIndex;
  149.  
  150. // Loading not same images.
  151.  
  152. do {
  153. newIndex = Math.floor(Math.random() * imgNamesArray.length);
  154. } while (newIndex === previousIndex || newIndex === currentIndex);
  155.  
  156. previousIndex = currentIndex;
  157. currentIndex = newIndex;
  158.  
  159. // Preload the next image - will it help ?
  160.  
  161. const preloadIndex = (currentIndex + 1) % imgNamesArray.length;
  162. const preloadImage = new Image();
  163.  
  164. preloadImage.src = `./images/${imgNamesArray[preloadIndex]}`;
  165. currentImage.src = `./images/${imgNamesArray[currentIndex]}`;
  166.  
  167. console.log(`previousIndex: ${previousIndex}, currentIndex: ${currentIndex}, newIndex: ${newIndex}, match: ${previousIndex === currentIndex ? "matched" : newIndex}`);
  168.  
  169. // currentIndex = (currentIndex + 1) % imgNamesArray.length;
  170.  
  171. if (currentImage.classList.contains("current")) {
  172. currentImage.classList.remove("current");
  173. currentImage.classList.add("next");
  174. } else {
  175. currentImage.classList.remove("next");
  176. currentImage.classList.add("current");
  177. }
  178.  
  179. if (nextImage.classList.contains("next")) {
  180. nextImage.classList.remove("next");
  181. nextImage.classList.add("current");
  182.  
  183. nextImage.src = `./images/${imgNamesArray[previousIndex]}`;
  184. // preloadImages();
  185. } else {
  186. // console.log("lets imagine");
  187. nextImage.classList.remove("current");
  188. nextImage.classList.add("next");
  189. }
  190.  
  191. // rest not used.
  192. // currentImage.src = `./images/${imgNamesArray[currentIndex]}`;
  193.  
  194. /* currentImage.classList.remove("current");
  195. currentImage.classList.add("next");
  196.  
  197.  
  198. nextImage.classList.remove("next");
  199. nextImage.classList.add("current"); */
  200.  
  201.  
  202. }
  203.  
Advertisement
Add Comment
Please, Sign In to add comment