How to Change Image Dynamically when User Scrolls using JavaScript ?

We are going to add the functionality to our web-page so that whenever the user scrolls up or scrolls down on the image, then the image changes. We have used only 3 images but it can easily be expanded for multiple images.
We are keeping the images on top of each other, this makes sure only one image is visible at a time. When we scroll, we decrement the z-coordinate of the current image and increments the z-coordinate of the new image. By doing this the new image overlays the old image and it comes on top of all images and becomes visible.
Â
- HTML Code: It is used to create a basic structure to include images.Â
Â
html
<!DOCTYPE html><html>Â
<head>    <meta charset="utf-8" />    <title>        Change Image Dynamically        when User Scrolls    </title></head>Â
<body><h1>zambiatek</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 Code: Css is used to design the structure. The position property is the most important things here. It will make all the images to appear on top of each other.
Â
html
<style>Â Â Â Â body {Â Â Â Â Â Â Â Â text-align: center;Â Â Â Â }Â Â Â Â h1 {Â Â Â Â Â Â Â Â color: green;Â Â Â Â }Â Â Â Â img {Â Â Â Â Â Â Â Â position: absolute;Â Â Â Â Â Â Â Â left: 300px;Â Â Â Â }</style> |
- Javascript code: In this section we will add JavaScript code to perform the scrolling on the image.
Â
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 scroll 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> |
Final Solution: In this section we will combine the above three section.Â
Â
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>zambiatek</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 scroll 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> |
Output:Â
Â
Note: The above code will change image only if mouse if over the image.
Â




