Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: Leguim en 31 Agosto 2020, 09:42 am



Título: [Pregunta]: ¿Cuál es la formula correcta?
Publicado por: Leguim en 31 Agosto 2020, 09:42 am
Estoy tratando de hacer un sidebar "pegajoso/sticky" pero la siguiente formula como que no me funciona del todo bien, en un principio si funciona bien pero se estropea si al documento se le agregan nuevos elementos (append) es decir, la altura de la página aumenta entonces se me estropea...

Código
  1. if($(this).scrollTop() > $('.sidebar_nav_left').offset().top - $(window).scrollTop())
  2. {
  3.          // le agrego al sidebar un estilo de position "fixed" para hacer el efecto de sticky
  4.         // y modifico el marginTop del sidebar a "-45px"
  5. }
  6. else
  7. {
  8.         // le agrego al sidebar un estilo de position "relative" para hacer el efecto de que se despegó ya que llegó nuevamente arriba de todo.
  9. }
  10.  

Pero como dije esta formula tiene ese problema, y no soy muy bueno para estas cosas...


Título: Re: [Pregunta]: ¿Cuál es la formula correcta?
Publicado por: Drakaris en 1 Septiembre 2020, 11:05 am
Buenas, creo que estas buscando algo como esto? Este trozo de código es de un menu horitzontal que cuando haces scroll hacia abajo, se adhiere arriba de la página.

(jQuery)
Código
  1. var altura = $('.menu').offset().top;
  2.    $(window).on('scroll', function(){
  3.        if ( $(window).scrollTop() > altura ){
  4.            $('.menu').addClass('menu-fixed');
  5.        } else {
  6.            $('.menu').removeClass('menu-fixed');
  7.        }
  8.    });
  9.  

La idea es la siguiente:
Código
  1. var altura = $(".menu").offset().top
la variable altura, obtiene la altura de posición donde esta el menú
Código
  1. $(window).on('scroll', function(){
Después de obtener la altura del objeto (del menu), vamos a hacer eventListener del scroll, en jquery es con la funcion on().
Código
  1.        if ( $(window).scrollTop() > altura ){
  2.            $('.menu').addClass('menu-fixed');
  3.        } else {
  4.            $('.menu').removeClass('menu-fixed');
  5.        }
  6.  
dentro del listener, vamos a hacer una condicional, que, cuando la altura del scroll ($(window).scrollTop()) sea mayor a la altura del menú. Este me añada la clase menu-fixed a la etiqueta con la clase .menu. Por lo contrario me va a eliminar la clase menu-fixed.

Si el scrollTop() es mayor que la altura del menu eso significa que estoy haciendo scroll hacia abajo, así que aplica la clase.

Aquí estoy usando Jquery http://g-t-e.260mb.net/plugins/jquery-lastest.js

Código
  1. .menu-fixed {
  2.    position: fixed;
  3.    z-index: 1000;
  4.    top: 0;
  5.    left: 0;
  6.    width: 100%;
  7.    max-width: 1000%;
  8.    box-shadow: 0px 4px 3px rgba(0,0,0,.5);
  9. }
  10.  

Espero haberte ayudado. Suerte ;D


Título: Re: [Pregunta]: ¿Cuál es la formula correcta?
Publicado por: Leguim en 3 Septiembre 2020, 01:52 am
Hola!

Si, el código funcionaba bien lo que pasó fue que en otra parte de la aplicación estaba eliminando el evento del scroll entonces era eso lo que me daba problemas, ahora todo funciona como esperaba.

Gracias!!