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

Scroll to top button visible only on desktop (no mobile)

I made a scroll to top button that appears when the user scrolls down 25px from the top of the document (otherwise it’s not visible) thanks to JavaScript following a tutorial because I still don’t know anything about this programming language.

However, I would like it to be visible only on desktop websites and not also on mobile.

I tried using media queries but they don’t work since JavaScript has control over the visibility of the button.
What function can I integrate to manage everything with JS?

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

Here is the code I’m using.

let myButton = document.getElementById("to-top-container");

window.onscroll = function() {
  scrollFunction()
};


function scrollFunction() {
  if (document.body.scrollTop > 25 || document.documentElement.scrollTop > 25) {
    myButton.style.display = "block";
  } else {
    myButton.style.display = "none";
  }
}
#to-top-container {
  position: fixed;
  bottom: 30px;
  right: 3px;
}

.to-top-button {
  background-color: #263238;
  min-height: 40px;
  min-width: 40px;
  border-radius: 20px;
  text-decoration: none;
  display: flex;
  justify-content: center;
  align-items: center;
  box-shadow: 2px 4px 5px rgb(0 0 0 / 30%);
  /* animation: Up 2.3s infinite; */
}

#to-top-container .lni {
  font-size: 14px;
  font-weight: 900;
  color: white;
}
<div id="to-top-container">
  <a href="#body-container" title="Torna su" class="to-top-button">
    <i class="lni lni-chevron-up"></i>
  </a>
</div>

>Solution :

There is a JS way to detect if a media query is matched: this is done by using window.matchMedia(). Then it is a matter of adding the appropriate media query to matchMedia() function, and then checking the .matches property in your if block:

let myButton = document.getElementById("to-top-container");

window.onscroll = function() {
  scrollFunction()
};


function scrollFunction() {
  const matchesMediaQuery = window.matchMedia('(min-width: 600px)');
  if (matchesMediaQuery.matches && (document.body.scrollTop > 25 || document.documentElement.scrollTop > 25)) {
    myButton.style.display = "block";
  } else {
    myButton.style.display = "none";
  }
}

scrollFunction();
#to-top-container {
  position: fixed;
  bottom: 30px;
  right: 3px;
}

.to-top-button {
  background-color: #263238;
  min-height: 40px;
  min-width: 40px;
  border-radius: 20px;
  text-decoration: none;
  display: flex;
  justify-content: center;
  align-items: center;
  box-shadow: 2px 4px 5px rgb(0 0 0 / 30%);
  /* animation: Up 2.3s infinite; */
}

#to-top-container .lni {
  font-size: 14px;
  font-weight: 900;
  color: white;
}
<div id="to-top-container">
  <a href="#body-container" title="Torna su" class="to-top-button">
    <i class="lni lni-chevron-up"></i>
  </a>
</div>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
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