Me gustaría crear un div, que se encuentra debajo de un bloque de contenido, pero que una vez que la página se ha desplazado lo suficiente como para contactar con su límite superior, se fija en su lugar y se desplaza con la página.
javascript
jquery
css
scroll
positioning
evanr
fuente
fuente
position: sticky; top:0;
funciona en la mayoría de los navegadores en enero de 2017.position: sticky;
cosa es mágica.Respuestas:
Puede usar simplemente css, posicionando su elemento como fijo :
Editar: debe tener el elemento con posición absoluta, una vez que el desplazamiento de desplazamiento ha alcanzado el elemento, debe cambiarse a fijo, y la posición superior debe establecerse en cero.
Puede detectar el desplazamiento de desplazamiento superior del documento con la función scrollTop :
Cuando el desplazamiento desfase alcanza 200, el elemento se adhieren a la parte superior de la ventana del navegador, ya que se coloca como fijo.
fuente
if ($(this).scrollTop() < 200 && $el.css('position') == 'fixed') { $('.fixedElement').css({'position': 'static', 'top': '0px'}); }
new example
enlace que diste está tan limpio y claro que ni siquiera puedo verlo! -_-Has visto este ejemplo en la página de problemas de Google Code y (solo recientemente) en la página de edición de Stack Overflow.
La respuesta de CMS no revierte el posicionamiento cuando te desplazas hacia arriba. Aquí está el código descaradamente robado de Stack Overflow:
Y una simple demostración en vivo .
Una alternativa naciente y libre de scripts es
position: sticky
, que es compatible con Chrome, Firefox y Safari. Vea el artículo sobre HTML5Rocks y demo , y documentos de Mozilla .fuente
offset
debe haber dejado de aceptar un objeto como entrada api.jquery.com/offset . @Eddie Su modificación debe ser segura con jQuery actual.var d = $("#scroller-anchor").offset().top;
convar d = $("#sidebar").offset().top;
y deshacerse del vacío div desplazador-ancla todos juntos? Aquí está mi tenedor demostrando de lo que estoy hablando.A partir de enero de 2017 y el lanzamiento de Chrome 56, la mayoría de los navegadores de uso común admiten la
position: sticky
propiedad en CSS.hace el truco para mí en Firefox y Chrome.
En Safari todavía necesitas usar
position: -webkit-sticky
.Polyfills están disponibles para Internet Explorer y Edge; https://github.com/wilddeer/stickyfill parece ser bueno.
fuente
Tuve el mismo problema que tú y terminé haciendo un complemento jQuery para solucionarlo. En realidad, resuelve todos los problemas que la gente ha enumerado aquí, además de agregar algunas características opcionales también.
Opciones
https://github.com/donnyv/sticky-panel
demo: http://htmlpreview.github.io/?https://github.com/donnyv/sticky-panel/blob/master/jquery.stickyPanel/Main.htm
fuente
code
// separar panel node.css ({"margin": 0, "left": nodeLeft, "top": newNodeTop, "position": "fixed", "width": node.width ()});code
Y así es como sin jquery (ACTUALIZACIÓN: vea otras respuestas donde ahora puede hacer esto solo con CSS)
fuente
Así es como lo hice con jquery. Todo esto fue improvisado de varias respuestas en el desbordamiento de la pila. Esta solución almacena en caché los selectores para un rendimiento más rápido y también resuelve el problema de "salto" cuando el div pegajoso se vuelve pegajoso.
Compruébelo en jsfiddle: http://jsfiddle.net/HQS8s/
CSS:
JS:
fuente
Aquí hay otra opción:
JAVASCRIPT
Su
#myElementToStick
debe comenzar conposition:absolute
la propiedad CSS.fuente
Como han dicho Josh Lee y Colin 't Hart , opcionalmente podrías usar
position: sticky; top: 0;
aplicación al div en el que deseas desplazarte ...Además, lo único que tendrá que hacer es copiar esto en la parte superior de su página o formatearlo para que quepa en una hoja CSS externa:
Simplemente reemplace
#sticky_div's_name_here
con el nombre de su div, es decir, si su div fuera<div id="example">
, lo pondría#example { position: sticky; top: 0; }
.fuente
Mi solución es un poco detallada, pero maneja el posicionamiento variable desde el borde izquierdo para diseños centrados.
fuente
Aquí hay una versión más para probar para aquellos que tienen problemas con los demás. Reúne las técnicas discutidas en esta pregunta duplicada y genera los DIV auxiliares necesarios dinámicamente para que no se requiera HTML adicional.
CSS:
JQuery:
Para hacer que un elemento sea pegajoso, haga lo siguiente:
Cuando el elemento se vuelve pegajoso, el código gestiona la posición del contenido restante para evitar que salte al espacio dejado por el elemento adhesivo. También devuelve el elemento adhesivo a su posición original no adhesiva cuando se desplaza hacia atrás por encima de él.
fuente
Aquí hay una versión extendida de la respuesta de Josh Lee. Si desea que el div esté en la barra lateral a la derecha y flote dentro de un rango (es decir, debe especificar las posiciones de anclaje superior e inferior). También corrige un error cuando ve esto en dispositivos móviles (debe verificar la posición de desplazamiento hacia la izquierda, de lo contrario, el div se moverá fuera de la pantalla).
fuente
Encontré esto cuando buscaba lo mismo. Sé que es una vieja pregunta, pero pensé que ofrecería una respuesta más reciente.
Scrollorama tiene una función 'pin it' que es justo lo que estaba buscando.
http://johnpolacek.github.io/scrollorama/
fuente
La información proporcionada para responder a esta otra pregunta puede serle de ayuda, Evan:
Compruebe si el elemento es visible después de desplazarse
Básicamente, desea modificar el estilo del elemento para establecerlo como fijo solo después de haber verificado que el valor de document.body.scrollTop es igual o mayor que la parte superior de su elemento.
fuente
La respuesta aceptada funciona pero no vuelve a la posición anterior si se desplaza por encima de ella. Siempre está pegado a la parte superior después de ser colocado allí.
La respuesta de jleedev funcionaría, pero no pude hacerlo funcionar. Su página de ejemplo tampoco funcionó (para mí).
fuente
Puede agregar 3 filas adicionales para que cuando el usuario vuelva a la parte superior, el div se pegue en su lugar anterior:
Aquí está el código:
fuente
Tengo enlaces configurados en un div, por lo que es una lista vertical de enlaces de letras y números.
Luego configuro esta práctica función jQuery para guardar la posición cargada y luego cambiar la posición a fija cuando se desplaza más allá de esa posición.
NOTA: ¡esto solo funciona si los enlaces están visibles en la carga de la página!
fuente
Utilicé parte del trabajo anterior para crear esta tecnología. Lo mejoré un poco y pensé en compartir mi trabajo. Espero que esto ayude.
Código jsfuddle
Esta es una forma un poco más dinámica de hacer el desplazamiento. Necesita algo de trabajo y en algún momento lo convertiré en un complemento, pero esto es lo que se me ocurrió después de una hora de trabajo.
fuente
En javascript puedes hacer:
fuente
No es una solución exacta pero es una gran alternativa a considerar
este CSS Solamente superior de la barra de desplazamiento de la pantalla . Resuelto todo el problema con SOLO CSS , NO JavaScript, NO JQuery, No Brain work ( lol ).
Disfruta mi violín : D todos los códigos están incluidos allí :)
CSS
Ponga el contenido el tiempo suficiente para que pueda ver el efecto aquí :) Ah, y la referencia también está ahí, por el hecho de que merece su crédito
SOLO CSS Barra de desplazamiento de la parte superior de la pantalla
fuente
Aquí hay un ejemplo que usa el complemento jquery-visible: http://jsfiddle.net/711p4em4/ .
HTML:
CSS:
JS (incluye el complemento jquery-visible):
fuente
pegajoso hasta que el pie de página llegue al div:
fuente