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

¿Te referís a cómo saber si un elemento determinado está dentro del area visible del navegador?

Yo tengo un script hecho por mi, para jQuery, que se encarga de esa tarea. Lo modifiqué para que lo entiendas. La idea es que un evento se dispare cuando el elemento está visible y cuando se pierde:

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.                     $('#info').html('<p>Est&aacute; visible: '+$(this).text()+'</p>');
  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.                     $('#info').html('<p>Se perdi&oacute;: '+$(this).text()+'</p>');
  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:1000px;
  65.             left:2000px;
  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>

Acá lo tenés funcionando JSBin: http://jsbin.com/ewatas

El script funciona muy bien y tiene una serie de aplicaciones. Tal vez se lo podría implementar en forma de plugin y optimizar para que no use tantos callbacks y eventos.

Espero entiendas cómo se lo aplica. Saludos.
__________________
nahueljose.com.ar