Estoy creando una barra de herramientas que se incluirá en una página. el div en el que se incluirá se mostrará de forma predeterminada : ninguno . ¿Hay alguna manera de poner un detector de eventos en mi barra de herramientas para que escuche cuando se vuelva visible y pueda inicializarse? ¿O tendré que pasarle una variable de la página que lo contiene?
Gracias
javascript
JD Isaacks
fuente
fuente
Respuestas:
Los eventos de Javascript tratan con la interacción del usuario , si su código está lo suficientemente organizado, debería poder llamar a la función de inicialización en el mismo lugar donde cambia la visibilidad (es decir, no debería cambiar
myElement.style.display
en muchos lugares, en su lugar, llame a una función / método que sí esto y cualquier otra cosa que desee).fuente
En el futuro, la nueva API HTML Intersection Observer es lo que está buscando. Le permite configurar una devolución de llamada que se llama cada vez que un elemento, llamado objetivo, se cruza con la ventana gráfica del dispositivo o con un elemento específico. Está disponible en las últimas versiones de Chrome, Firefox y Edge. Consulte https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API para obtener más información.
Ejemplo de código simple para observar la pantalla: ninguna conmutación:
En acción: https://jsfiddle.net/elmarj/u35tez5n/5/
fuente
Puede que llegue un poco tarde, pero podrías usar MutationObserver para observar cualquier cambio en el elemento deseado. Si se produce algún cambio, solo tendrá que comprobar si se muestra el elemento.
fuente
IntersectionObserver
- stackoverflow.com/a/52627221/2803743Hay al menos una forma, pero no es muy buena. Podrías sondear el elemento en busca de cambios como este:
El estándar DOM también especifica eventos de mutación , pero nunca he tenido la oportunidad de usarlos y no estoy seguro de qué tan bien son compatibles. Los usarías así:
Este código está fuera de mi cabeza, así que no estoy seguro de si funcionaría.
La mejor y más fácil solución sería tener una devolución de llamada en la función que muestra su objetivo.
fuente
Tuve este mismo problema y creé un complemento jQuery para resolverlo en nuestro sitio.
https://github.com/shaunbowe/jquery.visibilityChanged
Así es como lo usaría según su ejemplo:
fuente
.is(':visible')
junto consetTimeout
.Como dice @figha, si esta es su propia página web , debe ejecutar lo que necesite ejecutar después de hacer visible el elemento.
Sin embargo, con el fin de responder a la pregunta (y para cualquiera que haga extensiones de Chrome o Firefox , donde este es un caso de uso común), Mutation Summary y Mutation Observer permitirán que los cambios DOM activen eventos.
Por ejemplo, activar un evento para un elemento con un
data-widget
atributo que se agrega al DOM. Tomando prestado este excelente ejemplo del blog de David Walsh :Las respuestas incluyen
added
,removed
,valueChanged
y mucho más .valueChanged
incluye todos los atributos, incluidosdisplay
etc.fuente
También puede probar este complemento de jQuery: https://github.com/morr/jquery.appear
fuente
Solo para comentar sobre el soporte del navegador del detector de eventos DOMAttrModified:
Compatibilidad con varios navegadores
Estos eventos no se implementan de manera uniforme en diferentes navegadores, por ejemplo:
IE antes de la versión 9 no admitía los eventos de mutación en absoluto y no implementa algunos de ellos correctamente en la versión 9 (por ejemplo, DOMNodeInserted)
WebKit no es compatible con DOMAttrModified (consulte el error 8191 de webkit y la solución)
"eventos de nombre de mutación", es decir, DOMElementNameChanged y DOMAttributeNameChanged no son compatibles con Firefox (a partir de la versión 11), y probablemente también en otros navegadores.
Fuente: https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Mutation_events
fuente
mi solución:
por ejemplo:
fuente