2011-02-28 20 views
6

He arreglado div en la parte inferior de la página que funciona bien. Me pregunto si hay alguna manera simple de hacer que se "pare" en algún lugar de la página cuando el usuario se desliza hacia ella. Quiero que permanezca fijo en la parte inferior, hasta que el usuario se desplaza hacia abajo a un lugar definido en la página y luego lo pega a la página y se desplaza como el resto del contenido. ¿Alguna sugerencia?div fijo en la parte inferior de la página que se detiene en un lugar dado

+0

¿Quizás quiera decir (una modificación de) lo que se hace en las páginas de problemas de Chromium? (por ejemplo, http://code.google.com/p/chromium/issues/detail?id=75) Observe el panel izquierdo que permanece visible cuando se desplaza hacia abajo. Si no me estoy equivocando, te gustaría que sea un poco diferente pero espero que te ayude. – pimvdb

+0

sí, parece que podría usar algo ... lo investigaré, quizás pueda hacerlo funcionar de la manera que lo necesito. ¡Gracias por responder! – Gatekeeper

Respuesta

9

He intentado configurar algo en jsfiddle. Mientras escribía, veo que otros han publicado sus alternativas. En caso de que el mío ayude de alguna manera: http://jsfiddle.net/PnUmM/1/

Configuré la posición relativa en el CSS, calculo dónde está en la carga del documento para mantener la información a un lado y luego establecerlo en fijo.

var sticky_offset; 
$(document).ready(function() { 

    var original_position_offset = $('#sticky_for_a_while').offset(); 
    sticky_offset = original_position_offset.top; 
    $('#sticky_for_a_while').css('position', 'fixed'); 


}); 

$(window).scroll(function() { 
    var sticky_height = $('#sticky_for_a_while').outerHeight(); 
    var where_scroll = $(window).scrollTop(); 
    var window_height = $(window).height(); 


    if((where_scroll + window_height) > sticky_offset) { 
     $('#sticky_for_a_while').css('position', 'relative'); 
    } 

    if((where_scroll + window_height) < (sticky_offset + sticky_height)) { 
     $('#sticky_for_a_while').css('position', 'fixed'); 
    } 

}); 
+0

sí, las respuestas vienen muy rápido aquí :-) pero de todas formas gracias por intentarlo, tengo la idea – Gatekeeper

+0

ok, finalmente encontré tiempo para probar esto, tuve que volver a escribirlo en js puros porque no puedo usar jQuerry en esto, pero funciona como encanto ahora. Gracias. – Gatekeeper

+0

Hola, esto también funciona para mí ... sin embargo, en lugar de ajustarlo a la parte inferior, necesito adjuntarlo a la parte superior de la pantalla cuando se desplaza hacia abajo ... ¿Alguna idea? – Krunal

1

Tengo un complemento que hace lo contrario: está en el flujo de la página web, y cuando el usuario se desplaza pasando, se fija a la ventana gráfica. Sin embargo, lo que realmente hace es aplicar una clase css al elemento, por lo que debería poder usarlo tal cual.

puede encontrar el plugin aquí: https://github.com/hanssonlarsson/jquery-fixedscroll

entonces sugeriría que tenga su elemento en el flujo de su página web:

<div id="sometimesFixed">content</div> 

con CSS:

#sometimesFixed { 
    position: fixed; 
    bottom: 0; 
} 
#sometimesFixed.scroll { 
    position: static; 
} 

Y aplique el complemento como tal, en su JavaScript:

$('#sometimesFixed').fixedscroll({className: 'scroll'}); 

También hay un complemento más general, muy nuevo, llamado jquery-waypoints. La idea es vincular cualquier código a "puntos de ruta", puntos en la página web donde, cuando el usuario se desplaza más allá de ellos, se ejecuta algún código.

https://github.com/imakewebthings/jquery-waypoints

es probablemente más optimizado y un mejor ajuste que mi plugin, pero tu caso es distinto!

+0

Bueno, pero me temo que esta vez no puedo usar jquery, no lo usamos en nuestro proyecto. Tengo que encontrar la forma de hacerlo con dojo o js puro. ¡Pero gracias de cualquier manera! – Gatekeeper

2

Lo hice por usted: http://jsfiddle.net/XCYFG/1/.

$(document).ready(function() { 
    window._div1 = $('#div1'); //selector is expensive 
    window._window = $(window); 
    $(window).scroll(function(e) { 
     _div1.css("top", 
        Math.min(_window.height(), 
          window.scrollY + 100) 
        + _window.height() - _div1.height() - 110); 
    }).scroll(); 
}); 
+0

esto parece genial, pero ¿puedo controlarlo con la posición de otro div? Quiero decir que cuando me desplazo hacia abajo para ver "ese" div, ¿empiezas a desplazarte por este? Desde un breve vistazo a su código, el momento en que el desplazamiento del inicio div se define en píxeles, pero tendré diferente cantidad de contenido en cada página, así que tengo que ajustarlo cada vez ... pero pensándolo bien, puedo obtener una posición de ese div por js y que insertar el valor en tu script es eso correcto? – Gatekeeper

+0

¿Podría echar un vistazo a: http://jsfiddle.net/XCYFG/2/? – pimvdb

+0

En una nota lateral, mis soluciones captan mi potencia de CPU completa ... – pimvdb

Cuestiones relacionadas