posicionar posicionamiento otro hacer flotante fijo ejemplos div dejar debajo bootstrap abajo javascript html css

javascript - posicionamiento - Haga que un div se adhiera a la parte superior de la pantalla si se desplaza hacia abajo más allá de



posicionar div abajo (6)

Tengo un div que, cuando mi página se carga por primera vez, está a unos 100 px desde la parte superior (contiene algunos botones, etc. para la página).

Cuando un usuario se desplaza pasando, me gustaría que el div "siga" al usuario, ya que se adjunta a la parte superior de la pantalla. Cuando el usuario regrese a la parte superior de la página, quiero que vuelva a su posición original.

Visualization - xxxxx is the div: Default (page load) User vertically scrolled well past it --------- --------- | | |xxxxxxx| < after div reaches top of screen when |xxxxxxx| | | page is scrolled vertically, it stays | | | | there --------- ---------




El truco es que tienes que establecerlo como posición: fijo, pero solo después de que el usuario lo haya desplazado.

Esto se hace con algo como esto, adjuntando un controlador al evento window.scroll

// Cache selectors outside callback for performance. var $window = $(window), $stickyEl = $(''#the-sticky-div''), elTop = $stickyEl.offset().top; $window.scroll(function() { $stickyEl.toggleClass(''sticky'', $window.scrollTop() > elTop); });

Esto simplemente agrega una clase CSS sticky cuando la página se desplazó más allá de ella y elimina la clase cuando se realiza una copia de seguridad.

Y la clase CSS se ve así

#the-sticky-div.sticky { position: fixed; top: 0; }

EDITAR - Código modificado para almacenar en caché objetos jQuery, ahora más rápido.


El truco para hacer que la respuesta de infinito funcione sin el parpadeo es poner el control de desplazamiento en otro div luego el que desea haber arreglado.

Derivado del código que usa viixii.com , terminé usando esto:

function sticky_relocate() { var window_top = $(window).scrollTop(); var div_top = $(''#sticky-anchor'').offset().top; if (window_top > div_top) $(''#sticky-element'').addClass(''sticky''); else $(''#sticky-element'').removeClass(''sticky''); } $(function() { $(window).scroll(sticky_relocate); sticky_relocate(); });

De esta forma, la función solo se llama una vez que se llega al anclaje adhesivo y, por lo tanto, no se eliminará y se agregará la clase ".sticky" en cada evento de desplazamiento.

Ahora agrega la clase adhesiva cuando el ancla adhesiva llega a la parte superior y la elimina una vez que el ancla adhesiva vuelve a la vista.

Simplemente coloque un div vacío con una clase que actúa como un ancla justo encima del elemento que desea reparar.

Al igual que:

<div id="sticky-anchor"></div> <div id="sticky-element">Your sticky content</div>

Todo el crédito por el código va a viixii.com


Hubo una pregunta anterior hoy (sin respuestas) que dio un buen ejemplo de esta funcionalidad . Puede consultar el código fuente relevante para obtener información específica (buscar "barra de herramientas"), pero básicamente usan una combinación de la solución de webdestroya y un poco de JavaScript:

  1. Cargas de página y elemento es posición: estático
  2. En desplazamiento, la posición se mide, y si el elemento está en posición: estático y está fuera de la página, entonces el elemento se invierte a la posición: fijo.

Sin embargo, recomendaría consultar el código fuente mencionado anteriormente, ya que manejan algunos "errores" en los que quizás no pienses inmediatamente, como ajustar la posición de desplazamiento al hacer clic en los enlaces de anclaje.


position:fixed; uso position:fixed; y establecer la top:0;left:0;right:0;height:100px; y deberías poder "pegar" en la parte superior de la página.

<div style="position:fixed;top:0;left:0;right:0;height:100px;">Some buttons</div>