Estoy usando jQuery en mi sitio y me gustaría activar ciertas acciones cuando un determinado div se hace visible.
¿Es posible adjuntar algún tipo de controlador de eventos "isvisible" a div arbitrarios y ejecutar cierto código cuando el div se hace visible?
Me gustaría algo como el siguiente pseudocódigo:
$(function() {
$('#contentDiv').isvisible(function() {
alert("do something");
});
});
El código de alerta ("hacer algo") no debe activarse hasta que el contentDiv se haga visible.
Gracias.
javascript
jquery
frankadelic
fuente
fuente
Respuestas:
Siempre puede agregar al método original .show () para no tener que activar eventos cada vez que muestre algo o si necesita que funcione con código heredado:
Extensión jquery:
Ejemplo de uso:
Esto efectivamente le permite hacer algo beforeShow y afterShow mientras ejecuta el comportamiento normal del método original .show ().
También podría crear otro método para no tener que anular el método original .show ().
fuente
fadeTo
función no funciona correctamente después de implementar esta funciónEl problema está siendo abordado por observadores de mutación DOM . Le permiten vincular a un observador (una función) a eventos de contenido, texto o atributos cambiantes de elementos dom.
Con el lanzamiento de IE11, todos los principales navegadores admiten esta función, consulte http://caniuse.com/mutationobserver
El código de ejemplo es el siguiente:
fuente
No hay un evento nativo al que pueda conectarse para esto, sin embargo, puede activar un evento desde su secuencia de comandos después de que haya hecho visible el div utilizando. función de disparo
p.ej
fuente
show()
se llama desde varios lugares distintos del bloque de código mencionado anteriormente?onIsVisible
porque el uso de "isVisible" es un poco ambiguo en este momento.Puede usar el complemento jQuery's Live Query . Y escriba el código de la siguiente manera:
Luego, cada vez que el contentDiv esté visible, "¡haz algo" será alertado!
fuente
La solución de Redsquare es la respuesta correcta.
Pero como una solución IN-THEORY puede escribir una función que está seleccionando los elementos clasificados por
.visibilityCheck
( no todos los elementos visibles ) y verificar suvisibility
valor de propiedad; sitrue
entonces haz algo.Posteriormente, la función debe realizarse periódicamente utilizando la
setInterval()
función. Puede detener el temporizador utilizando laclearInterval()
llamada exitosa.Aquí hay un ejemplo:
También puede realizar algunas mejoras de rendimiento, sin embargo, la solución es básicamente absurda para ser utilizada en acción. Entonces...
fuente
display:none
?El siguiente código (extraído de http://maximeparmentier.com/2012/11/06/bind-show-hide-events-with-jquery/ ) le permitirá usarlo
$('#someDiv').on('show', someFunc);
.fuente
el.apply(this, arguments)
para solucionar esto.Si desea activar el evento en todos los elementos (y elementos secundarios) que realmente se hacen visibles, por $ .show, toggle, toggleClass, addClass o removeClass:
Y ahora tu elemento:
Puede agregar anulaciones a funciones jQuery adicionales agregándolas a la matriz en la parte superior (como "attr")
fuente
un activador de evento de ocultar / mostrar basado en la idea de Glenns: se quitó la palanca porque activa mostrar / ocultar y no queremos 2 incendios para un evento
fuente
Tuve el mismo problema y creé un complemento jQuery para resolverlo en nuestro sitio.
https://github.com/shaunbowe/jquery.visibilityChanged
Así es como lo usarías según tu ejemplo:
fuente
Utilice puntos de referencia jQuery:
Otros ejemplos en el sitio de jQuery Waypoints .
fuente
Lo que me ayudó aquí es el reciente polyfill de ResizeObserver :
Tenga en cuenta que es crossbrowser y performant (sin sondeo).
fuente
Hice una simple función setinterval para lograr esto. Si el elemento con la clase div1 está visible, establece que div2 esté visible. No conozco un buen método, sino una solución simple.
fuente
También puede probar el complemento jQuery aparece como se menciona en el hilo paralelo https://stackoverflow.com/a/3535028/741782
fuente
¡Este soporte facilita el evento de activación después de la animación! [probado en jQuery 2.2.4]
Inspirado por http://viralpatel.net/blogs/jquery-trigger-custom-event-show-hide-element/
fuente
Simplemente vincule un disparador con el selector y coloque el código en el evento disparador:
fuente
Hay un complemento jQuery disponible para ver los cambios en los atributos DOM,
https://github.com/darcyclarke/jQuery-Watch-Plugin
El complemento se ajusta Todo lo que necesita hacer es vincular MutationObserver
Luego puede usarlo para ver el div usando:
fuente
Espero que esto haga el trabajo de la manera más simple:
fuente
Cambié el desencadenador de evento de ocultar / mostrar de Catalint basado en la idea de Glenns. Mi problema fue que tengo una aplicación modular. Cambio entre módulos que muestran y ocultan padres divs. Luego, cuando oculto un módulo y muestro otro, con su método tengo un retraso visible cuando cambio entre módulos. Solo necesito a veces iluminar este evento, y en algunos niños especiales. Así que decidí notificar solo a los niños con la clase "displayObserver"
Luego, cuando un niño quiere escuchar el evento "show" u "hide", debo agregarle la clase "displayObserver", y cuando no quiere continuar escuchándolo, lo elimino de la clase
Deseo ayuda
fuente
Una forma de hacer esto.
Funciona solo en los cambios de visibilidad realizados por el cambio de clase css, pero también se puede ampliar para observar los cambios de atributos.
fuente
mi solución:
ejemplo de uso:
fuente
fuente
Este código de control automático no requiere consulta visible o control invisible
fuente