Как изменить изображение динамически, когда пользователь прокручивает с помощью JavaScript?
Мы собираемся добавить функциональность на нашу веб-страницу, чтобы всякий раз, когда пользователь прокручивает изображение вверх или вниз, оно менялось. Мы использовали только 3 изображения, но его можно легко расширить для нескольких изображений.
Мы храним изображения друг над другом, чтобы одновременно было видно только одно изображение. Когда мы прокручиваем, мы уменьшаем координату z текущего изображения и увеличиваем координату z нового изображения. При этом новое изображение накладывается на старое, появляется поверх всех изображений и становится видимым.
- HTML-код: используется для создания базовой структуры, включающей изображения.
html
<!DOCTYPE html> < html > < head > < meta charset = "utf-8" /> < title > Change Image Dynamically when User Scrolls </ title > </ head > < body > < h1 >GeeksforGeeks</ h1 > < b >A Computer Science Portal for Geeks</ b > < div id = "scroll-image" > < img src = "CSS.png" class = "test" /> < img src = "html.png" class = "test" /> < img src = "php.png" class = "test" /> </ div > </ body > </ html > |
- Код CSS: CSS используется для проектирования структуры. Свойство position - это здесь самое главное. Все изображения будут отображаться друг на друге.
html
< style > body { text-align: center; } h1 { color: green; } img { position: absolute; left: 300px; } </ style > |
- Код Javascript: в этом разделе мы добавим код JavaScript для прокрутки изображения.
javascript
<script> window.onload = function () { // Index of current image // which is on display var imageIndex = 0; // Object array of all the // images of class test var images = document.getElementsByClassName( 'test' ); // This tells us if mouse if over // image or not, We only change // image if mouse if over it var isMouseOverImage = false ; // Object of parent element // containing all images var scrollImages = document.getElementById( 'scroll-image' ); // Stores the current scoll co-ordinates // so that the window don't scroll down // while scrolling the images var x, y; // This function sets the scroll to x, y function noScroll() { window.scrollTo(x, y); } // The following event id fired once when // We hover mouse over the images scrollImages.addEventListener( "mouseenter" , function () { // We store the current page // offset to x,y x = window.pageXOffset; y = window.pageYOffset; // We add the following event to // window object, so if we scroll // down after mouse is over the // image we can avoid scrolling // the window window.addEventListener( "scroll" , noScroll); // We set isMouseOverImage to // true, this means Mouse is // now over the image isMouseOverImage = true ; }); // The following function is fired // when mouse is no longer over // the images scrollImages.addEventListener( "mouseleave" , function () { // We set isMouseOverImage to // false, this means mouse is // not over the image isMouseOverImage = false ; // We remove the event we previously // added because we are no longer // over the image, the scroll will // now scroll the window window.removeEventListener( "scroll" , noScroll); }); // The following function is called // when we move mouse wheel over // the images scrollImages.addEventListener( "wheel" , function (e) { // We check if we are over // image or not if (isMouseOverImage) { var nextImageIndex; // The following condition // finds the next image // index depending if we // scroll up or scroll down if (e.deltaY > 0) nextImageIndex = (imageIndex + 1) % images.length; else nextImageIndex = (imageIndex - 1 + images.length) % images.length; // We set the z index of current // image to 0 images[imageIndex].style.zIndex = "0" ; // We set the z index of next // image to 1, this makes // The new image appear on top // of old image images[nextImageIndex].style.zIndex = "1" ; imageIndex = nextImageIndex; } }); } </script> |
Окончательное решение: в этом разделе мы объединим три вышеупомянутых раздела.
JavaScript
<!DOCTYPE html> <html> <head> <meta charset= "utf-8" /> <title> Change image dynamically when user scrolls </title> <style> body { text-align: center; } h1 { color: green; } img { position: absolute; left: 300px; } </style> </head> <body> <h1>GeeksforGeeks</h1> <b>A Computer Science Portal for Geeks</b> <div id= "scroll-image" > <img src= "CSS.png" class= "test" /> <img src= "html.png" class= "test" /> <img src= "php.png" class= "test" /> </div> <script> window.onload = function () { // Index of current image // which is on display var imageIndex = 0; // Object array of all the // images of class test var images = document.getElementsByClassName( 'test' ); // This tells us if mouse if over // image or not, We only change // image if mouse if over it var isMouseOverImage = false ; // Object of parent element // containing all images var scrollImages = document.getElementById( 'scroll-image' ); // Stores the current scoll co-ordinates // so that the window don't scroll down // while scrolling the images var x, y; // This function sets the scroll to x, y function noScroll() { window.scrollTo(x, y); } // The following event id fired once when // We hover mouse over the images scrollImages.addEventListener( "mouseenter" , function () { // We store the current page // offset to x,y x = window.pageXOffset; y = window.pageYOffset; // We add the following event to // window object, so if we scroll // down after mouse is over the // image we can avoid scrolling // the window window.addEventListener( "scroll" , noScroll); // We set isMouseOverImage to // true, this means Mouse is // now over the image isMouseOverImage = true ; }); // The following function is fired // when mouse is no longer over // the images scrollImages.addEventListener( "mouseleave" , function () { // We set isMouseOverImage to // false, this means mouse is // not over the image isMouseOverImage = false ; // We remove the event we previously // added because we are no longer // over the image, the scroll will // now scroll the window window.removeEventListener( "scroll" , noScroll); }); // The following function is called // when we move mouse wheel over // the images scrollImages.addEventListener( "wheel" , function (e) { // We check if we are over // image or not if (isMouseOverImage) { var nextImageIndex; // The following condition // finds the next image // index depending if we // scroll up or scroll down if (e.deltaY > 0) nextImageIndex = (imageIndex + 1) % images.length; else nextImageIndex = (imageIndex - 1 + images.length) % images.length; // We set the z index of current // image to 0 images[imageIndex].style.zIndex = "0" ; // We set the z index of next // image to 1, this makes // The new image appear on top // of old image images[nextImageIndex].style.zIndex = "1" ; imageIndex = nextImageIndex; } }); } </script> </body> </html> |
Выход:
Примечание. Приведенный выше код изменит изображение только при наведении указателя мыши на изображение.