Botón subir animado con javascript


A diferencia de otras opciones basadas en Jquery, desarrollé este botón usando solo javascript puro. No es un secreto mi obsesión por la busqueda del rendimiento, así que hoy les comparto mi versión del botón "ir arriba" más lijero y personalizable.

Instalar

Desde el panel de administración de Blogger, vamos a Temas > Personalizar > Opciones avanzadas > CSS Personalizado y aquí pegaremos el código css.


/*!
=> Plugin: scrollToTop
=> by zkreations.com | Daniel Abel 
*/.scrollToTop {outline: none;border: none;font-size: 14px;cursor: pointer;}.scrollToTop svg {display: block;}.scrollToTop {position: fixed;opacity: 0;visibility: hidden;-webkit-transition: visibility .3s, opacity .3s, background .3s, -webkit-transform .3s;transition: visibility .3s, opacity .3s, background .3s, -webkit-transform .3s;transition: transform .3s, visibility .3s, opacity .3s, background .3s;transition: transform .3s, visibility .3s, opacity .3s, background .3s, -webkit-transform .3s;-webkit-transform: translateY(-2em);transform: translateY(-2em);}.scrollToTop.visible {visibility: visible;opacity: 1;-webkit-transform: translateY(0);transform: translateY(0);}  
/*
=> Personalizar
*/
/* Icono
--------------------------------------------*/
.scrollToTop svg {
   fill: #FFFFFF; /* color */
}
/* Boton
--------------------------------------------*/
.scrollToTop {
   background-color: rgba(0, 0, 0, 0.85); /* color de fondo */
   box-shadow: 0 1px 2px rgba(0,0,0,0.5), 0 1px 7px rgba(0,0,0,0.25); /* sombra */
   bottom: 1em; /* Separación inferior */
   right: 1em; /* Separación derecha */
   padding: .5em; /* relleno */
   border-radius: 4px; /* borde redondeado */
}
.scrollToTop:hover {
   background-color: rgba(0, 0, 0, 0.95); /* color de fondo (hover) */
}

No olvides guardar los cambios presionando el botón "Aplicar". Ahora nos vamos a dirigir a Temas > Editar HTML, buscamos </body> y arriba de eso pegaremos el siguiente código:

<!-- HTML-->
<button id="scrollToTop" class="scrollToTop">
   <svg xmlns="http://www.w3.org/2000/svg" width="35" height="35" viewBox="0 0 24 24">
      <path d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"/>
      <path d="M0 0h24v24H0z" fill="none"/>
   </svg>
</button>

<!-- Javascript -->
<script>//<![CDATA[
// Plugin: scrollToTop
// by zkreations.com | Daniel Abel
var scrollToTop = (function() {
    var showButton = 600,
        scrollSpeed = 1000; 
    function scrollTop(b) {
        function a(d) {
            c += Math.PI / (b / (d - e));
            c >= Math.PI && window.scrollTo(0, 0);
            0 !== window.scrollY && (window.scrollTo(0, Math.round(scrollTime + scrollTime * Math.cos(c))), e = d, window.requestAnimationFrame(a))
        }
        var scrollTime = window.scrollY / 2,
            c = 0,
            e = performance.now();
        window.requestAnimationFrame(a)
    }
    var scrollPosition = window.scrollY,
        scrollButton = document.getElementById("scrollToTop");
    window.addEventListener("scroll", function() {
        scrollPosition = window.scrollY;
        showButton < scrollPosition ? scrollButton.classList.add("visible") : scrollButton.classList.remove("visible")
    });
    scrollButton.onclick = function() {
        scrollTop(scrollSpeed)
    }
})();
//]]></script>

Guarda los cambios y listo. Con eso ya tenemos instalado el botón "ir arriba" sin jquery.

Opciones

De momento solo he incluido 2 opciones y se encuentran en el código javascript, están resaltadas en amarillo y por defecto contienen el valor 600 y 1000. En la siguiente tabla se explican estos valores:

showButtonnumberDesplazamiento del scroll antes de mostrar el botón
scrollSpeednumberVelocidad de desplazamiento (1000 = 1 segundo)

Espero que este aporte les sea de utilidad.




Entradas que pueden interesarte