Veamos si entendí bien Tienes una página lo suficientemente larga para desplazarte, y hay un elemento que cuando aparece en la ventana gráfica, quieres hacer algo con ella. Por lo tanto, el único evento que se activa de forma segura en el momento en que el elemento ingresa en la ventana gráfica es el 'desplazamiento'. Entonces, si el elemento está en la página y el desplazamiento está en la ventana gráfica, lo que debe hacer es vincular una acción al evento de desplazamiento para verificar si el elemento está en la vista cada vez que se desencadena el evento. Más o menos así:
$(window).scroll(function() {
check_element_position();
});
Ahora, a fin de que usted pueda saber si el elemento está en la ventana gráfica, necesita 3 cosas. La parte superior de desplazamiento de ese elemento, el tamaño de la ventana gráfica y la parte superior de desplazamiento de la ventana.En caso de que más o menos el siguiente aspecto:
function check_element_position() {
var win = $(window);
var window_height = win.height();
var element = $(your_element);
var elem_offset_top = element.offset().top;
var elem_height = element.height();
var win_scroll = win.scrollTop();
var pseudo_offset = (elem_offset_top - win_scroll);
if (pseudo_offset < window_height && pseudo_offset >= 0) {
// element in view
}
else {
// elem not in view
}
}
Aquí, (elem_offset_top - win_scroll) representan la posición del elemento si no hay desplazamiento. De esta manera, solo tienes que verificar si la parte superior del desplazamiento del elemento es más alta que la ventana de la ventana para ver si está a la vista o no. Finalmente, podría ser más preciso en sus cálculos al agregar la altura del elemento (la variable ya está allí) porque el código que acabo de ejecutar disparará el evento incluso si el elemento es visible solo por 1 píxel.
Nota: Acabo de hacer que en cinco minutos, por lo que podría tener que corregir algo de esto, pero esto le da una bastante bueno idea de lo que está pasando;)
no dude en comentar y hacer preguntas
Voy a intentarlo y luego se lo haré saber. –
Demasiadas líneas para algo tan simple. –
¿Por qué el enfoque medio modular? Aconsejaría usar un estilo de programación modular o no modular para descartar confusiones. ¿Y por qué usar un bucle for cuando puede usar jQuery.each() en la instancia de elementos de jQuery? Eso ya sería tres líneas más cortas. –