Ver Mensaje Individual
  #3 (permalink)  
Antiguo 04/03/2012, 20:28
Avatar de Naahuel
Naahuel
 
Fecha de Ingreso: marzo-2011
Ubicación: localhost
Mensajes: 796
Antigüedad: 13 años, 1 mes
Puntos: 192
Respuesta: elemento visible

Una aplicación interesante es la de cargar imágenes (por ejemplo en una galería) sólo cuando pasan a estar visibles. Acá lo "emulo" usando fadeIn() y fadeOut(). Fijate cómo aparece y desaparece cuando se empieza a perder o a aparecer:

Código HTML:
Ver original
  1. <!doctype html>
  2.     <title>Prueba</title>
  3.     <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
  4.     <script type="text/javascript">
  5.         $(function(){
  6.             var elems = $('.estoy-visible');    //elementos que quiero saber si estan en el área visible
  7.             var winW = $(window).width();       //dimensiones de la ventana
  8.             var winH = $(window).height();      //dimensiones de la ventana
  9.             elems.each(function(){
  10.                 var self = $(this);
  11.                 self.on('esta/visible',function(){
  12.                     //evento personalizado que crearemos mas abajo, se dispara cuando el elemento está visible
  13.                     //lo que ponemos aca es lo que queremos hacer si el elemento aparece en pantalla
  14.                     $(this).fadeIn();
  15.                 });
  16.                 self.on('esta/invisible',function(){
  17.                     //evento personalizado que crearemos mas abajo, se dispara cuando el elemento está FUERA del area visible
  18.                     //lo que ponemos aca es lo que queremos hacer si el elemento DESAPARECE de la pantalla
  19.                     $(this).fadeOut();
  20.                 });
  21.                
  22.                 //obtenemos las dimensiones de cada elemento y su posicion
  23.                 var self_w = self.outerWidth(); //ancho exterior
  24.                 var self_h = self.outerHeight(); //alto exterior
  25.                 var self_l = self.offset().left; //coordenada izquierda
  26.                 var self_t = self.offset().top; //coordenada arriba
  27.                
  28.                 //asignamos un evento a window.scroll(), para cuando se haga scroll
  29.                 //esta parte del script es algo inefectiva. No es bueno si son muchos los elementos a verificar.
  30.                 $(window).scroll(function(){
  31.                     var scroll_h = this.pageXOffset;
  32.                     var scroll_v = this.pageYOffset;
  33.                     //acá verificamos si el elemento está COMPLETAMENTE dentro de las dimensiones de la ventana
  34.                     if( (self_w + self_l - scroll_h) <= winW && (self_l) >= scroll_h &&
  35.                         (self_h + self_t - scroll_v) <= winH && (self_t) >= scroll_v ){
  36.                         self.trigger('esta/visible');
  37.                     }
  38.                     else{
  39.                         self.trigger('esta/invisible');
  40.                     }
  41.                 });
  42.             });
  43.         });
  44.     </script>
  45.     <style type="text/css">
  46.     <!--
  47.         #wrap{
  48.             height:4000px;
  49.             width:6000px;
  50.             position:relative;
  51.         }
  52.        
  53.         #info{
  54.             position:fixed;
  55.             top:0;
  56.             left:0;
  57.         }
  58.        
  59.         .estoy-visible{
  60.             background:blue;
  61.             width:200px;
  62.             height:200px;
  63.             position:absolute;
  64.             top:800px;
  65.             left:300px;
  66.         }
  67.     -->
  68.     </style>
  69.    
  70. </head>
  71.     <div id="wrap">
  72.         <p id="info"></p>               <!-- párrafo SOLAMENTE para mostrar la info del elem 1-->
  73.         <div class="estoy-visible">Elemento 1</div> <!-- elemento que quiero saber si esta visible o no -->
  74.     </div>
  75. </body>
  76. </html>
__________________
nahueljose.com.ar