JQuery https://www.carloscarrascal.com/ es Eventos para cambios de visibilidad en JQuery https://www.carloscarrascal.com/blog/eventos-para-cambios-de-visibilidad-en-jquery <article data-history-node-id="22" class="node node--type-blog-post node--view-mode-rss group-one-column ds-2col-stacked-fluid clearfix"> <div class="group-header"> <div class="field field--name-node-title field--type-ds field--label-hidden field--item"><h1> Eventos para cambios de visibilidad en JQuery </h1> </div> <div class="field field--name-node-post-date field--type-ds field--label-hidden field--item">Jueves, Julio 6, 2017 - 23:02</div> </div> <div class="group-left"> <div class="field field--name-field-tags field--type-entity-reference field--label-hidden field--items"> <div class="field--item"><a href="/tags/jquery" hreflang="es">JQuery</a></div> <div class="field--item"><a href="/tags/javascript" hreflang="es">Javascript</a></div> </div> <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"><p>Este artículo es básicamente una traducción de este original en inglés:</p> <p><a href="http://viralpatel.net/blogs/jquery-trigger-custom-event-show-hide-element/" target="_blank">http://viralpatel.net/blogs/jquery-trigger-custom-event-show-hide-element/</a></p> <p>En un caso bastante particular necesitaba detectar si cambiaba la visibilidad de un elemento del DOM que venia de una librería externa de JS. Después de dar algunas vueltas encontré una solución bastante elegante, publicada hace bastante tiempo. No he visto nada parecido en castellano, y hay algunos hilos en Stackoverflow, pero con soluciones bastante extrañas, así que lo publicaré aquí.</p> <p>Con este bloque de código Javascript podemos registrar los eventos 'hide' y 'show' con la función .on() de JQuery como hacemos con cualquiera de los eventos estándar, de forma que podemos ejecutar nuestro código cuando se produzcan.</p> <pre> (function ($) { $.each(['show', 'hide'], function (i, ev) { var el = $.fn[ev]; $.fn[ev] = function () { this.trigger(ev); return el.apply(this, arguments); }; }); })(jQuery); </pre> <p>Una vez incluyamos este código, podemos registar los eventos usando un selector, de la manera tradicional:</p> <pre> $('#foo').on('show', function() { console.log('#foo es visible'); }); $('#foo').on('hide', function() { console.log('#foo esta oculto'); });</pre> <p>El código del ejemplo completo sería algo así.</p> <h2>Código HTML</h2> <pre> &lt;button id="btnMostrar"&gt;Mostrar&lt;/button&gt; &lt;button id="btnOcultar"&gt;Ocultar&lt;/button&gt; &lt;div class="contenedor"&gt; &lt;div id="foo"&gt; Elemento #foo &lt;/div&gt; &lt;/div&gt; &lt;div id="console"&gt; &lt;/div&gt;</pre> <h2>Código CSS</h2> <pre> .contenedor { height:60px; margin:10px; } #foo { background-color:#eeeeee; width:150px; height:50px; text-align:center; font-size:20px; }</pre> <h2>Código Javascript</h2> <pre> // Codigo para registrar eventos hide y show (function ($) { $.each(['show', 'hide'], function (i, ev) { var el = $.fn[ev]; $.fn[ev] = function () { this.trigger(ev); return el.apply(this, arguments); }; }); })(jQuery); // Mostrar elemento #foo al hacer click en el boton mostrar $('#btnMostrar').click(function(){ $('#foo').show(); }); // Ocultar elemento #foo al hacer click el boton ocular $('#btnOcultar').click(function(){ $('#foo').hide(); }); // Añadimos evento para imprimir un mensaje al mostrar #foo $('#foo').on('show', function(){ $('#console').html( $('#console').html() + '#foo es visible'+ '&lt;br&gt;' ) }); // Añadimos evento para imprimir un mensaje al ocultar #foo $('#foo').on('hide', function(){ $('#console').html( $('#console').html() + '#foo esta oculto'+ '&lt;br&gt;' ) }); </pre> <h2>Ejemplo​</h2> <p> </p> <style type="text/css"> <!--/*--><![CDATA[/* ><!--*/ .contenedor { height:60px; margin:10px; } #foo { background-color:#eeeeee; width:150px; height:50px; text-align:center; font-size:20px; } /*--><!]]>*/ </style> <script> <!--//--><![CDATA[// ><!-- (function ($) { $.each(['show', 'hide'], function (i, ev) { var el = $.fn[ev]; $.fn[ev] = function () { this.trigger(ev); return el.apply(this, arguments); }; }); })(jQuery); jQuery( document ).ready(function() { console.log( "ready!" ); // Mostrar elemento #foo al hacer click en el boton mostrar jQuery('#btnMostrar').click(function(){ jQuery('#foo').show(); }); // Ocultar elemento #foo al hacer click el boton ocular jQuery('#btnOcultar').click(function(){ jQuery('#foo').hide(); }); // Añadimos evento para imprimir un mensaje al mostrar #foo jQuery('#foo').on('show', function(){ jQuery('#console').html( jQuery('#console').html() + '#foo es visible'+ '<br>' ) }); // Añadimos evento para imprimir un mensaje al ocultar #foo jQuery('#foo').on('hide', function(){ jQuery('#console').html( jQuery('#console').html() + '#foo esta oculto'+ '<br>' ) }); }); //--><!]]> </script> <p><button id="btnMostrar">Show</button><button id="btnOcultar">Hide</button></p> <div class="contenedor"> <div id="foo">Yo soy #foo</div> </div> <div id="console"> </div> </div> </div> <div class="group-footer"> <section> <h2>Añadir nuevo comentario</h2> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=22&amp;2=comment&amp;3=comment" token="8G-0ziIYgIKVNZP_lsiweU7U_jtelpkeubzWPKGyBMY"></drupal-render-placeholder> </section> </div> </article> Thu, 06 Jul 2017 21:02:37 +0000 root 22 at https://www.carloscarrascal.com