Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Make the background-color of div change when the mouse is down and hovering

When hovering over a div along with the mouse being constantly held down, I would like the background-color of the div to be changed.

Code:

<style>
    #container{
        margin: auto;
        margin-top: 20px;
        height: 200px;
        width: 200px;
        background-color: aquamarine;

        display: grid;
        grid-template-columns: repeat(4, 1fr);
        grid-template-rows: repeat(4, 1fr);
    }
</style>
<body>
    <div id="container">
        <div class="cell"></div>
        <div class="cell"></div>
        <div class="cell"></div>
        <div class="cell"></div>
        <div class="cell"></div>
        <div class="cell"></div>
        <div class="cell"></div>
        <div class="cell"></div>
        <div class="cell"></div>
        <div class="cell"></div>
        <div class="cell"></div>
        <div class="cell"></div>
        <div class="cell"></div>
        <div class="cell"></div>
        <div class="cell"></div>
        <div class="cell"></div>
    </div>

    <script>
        let cells=Array.from(document.getElementsByClassName('cell'));
        cells.forEach(cell => {
            cell.onmouseover = () => {
                cell.onmousedown = () => {
                    cell.style.backgroundColor="black";
                }
            }
        });
    </script>

The problem is that the div only turns black on the first click. There is no change on the other div‘s when the mouse is then subsequently dragged over them while the mouse is constantly being held down. The cursor just turns into a red circle-backslash symbol.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

I have tried adding an event (as seen in the code above) where if the element is moved over but only when the mouse is down, it transforms the background-color to black.

Oh, and I’d like to only use vanilla js, not jQuery or any additional extensions.

>Solution :

try with the following script. It works on my side

<script>
            let cells=Array.from(document.getElementsByClassName('cell'));

            let flag = false;
            
            window.onmouseup = () => {                        
                flag = false;
            }
            cells.forEach(cell => {
                cell.onmouseover = () => {
                    if(flag == true)
                    {
                        cell.style.backgroundColor="black";
                    }
                    cell.onmousedown = () => {
                        cell.style.backgroundColor="black";
                        flag = true;
                    }                  

                    
                }
            });
        </script>
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading