Foros del Web » Programando para Internet » Javascript »

Saber cuando una parte de la web esta en pantalla

Estas en el tema de Saber cuando una parte de la web esta en pantalla en el foro de Javascript en Foros del Web. Hola a tod@s, Llevo toda la tarde buscando y no he tenido suerte, quisiera poder saber el momento en que una parte de la página ...
  #1 (permalink)  
Antiguo 02/01/2014, 11:56
Eux
 
Fecha de Ingreso: octubre-2010
Mensajes: 60
Antigüedad: 13 años, 6 meses
Puntos: 0
Saber cuando una parte de la web esta en pantalla

Hola a tod@s,

Llevo toda la tarde buscando y no he tenido suerte, quisiera poder saber el momento en que una parte de la página esté visible en pantalla, me explico, imagenemos que tengo un página bastante larga, y un poco más abajo haciendo srolling hay un lugar concreto (img, div...o lo que sea) que cuando aparezca por pantalla me gustaría que saltase un alert("Hola"). La solución debe ser dinámica, dado que la zona que hará saltar el alert cuando sea visible en pantalla puede estar un día en un sitio y otro día mucho más abajo.

¿alguna idea?

Gracias por anticipado.

Saludos.
  #2 (permalink)  
Antiguo 03/01/2014, 17:25
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Saber cuando una parte de la web esta en pantalla

puedes saber la posición de un elemento usando offsetParent y offsetTop y para saber la posición del scroll
Cita:
self.pageYOffset || (document.documentElement.scrollTop + document.body.scrollTop);
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #3 (permalink)  
Antiguo 03/01/2014, 18:58
Avatar de danny_  
Fecha de Ingreso: septiembre-2012
Mensajes: 95
Antigüedad: 11 años, 7 meses
Puntos: 4
Respuesta: Saber cuando una parte de la web esta en pantalla

Esta clase quizás te pueda ser de utilidad, únicamente tienes que instanciar la clase, y en los parámetros pasar el elemento en el cual efectuará la acción al realizar el scroll y el segundo parámetro un string con la acción o función que quieras ejecutar cuando hayas llegado el elemento target. Espero te sea de utilidad.

Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4. <title>Documento sin título</title>
  5. <script type="text/javascript">
  6.  
  7. window.onscroll=function(){
  8.     var elem=document.getElementById('target');
  9.     var getPositions=new ActionWhenPositionElement(elem,"alert('boom!!')");
  10.    
  11. }
  12.  
  13.  
  14.  
  15.  
  16.  
  17. function getScrollOffsets(w) {
  18.     // Use the specified window or the current window if no argument
  19.     w = w || window;
  20.  
  21.     // This works for all browsers except IE versions 8 and before
  22.     if (w.pageXOffset != null) return {x: w.pageXOffset, y:w.pageYOffset};
  23.    
  24.     // For IE (or any browser) in Standards mode
  25.     var d = w.document;
  26.     if (document.compatMode == "CSS1Compat")
  27.         return {x:d.documentElement.scrollLeft, y:d.documentElement.scrollTop};
  28.  
  29.     // For browsers in Quirks mode
  30.     return { x: d.body.scrollLeft, y: d.body.scrollTop };
  31. }
  32.  
  33.  
  34. function positionObject(obj){
  35.     var y=obj.offsetTop;
  36.     return y;
  37. }
  38. //activa una función al hacer scroll y llegar a la misma altura de el elemento idtarget.
  39. var count=1;
  40. function ActionWhenPositionElement(idTarget,functionString){
  41.     this.positionObjY=positionObject(idTarget);
  42.     this.positionScrollY=getScrollOffsets().y;
  43.    
  44.     if(this.positionObjY < this.positionScrollY+idTarget.getBoundingClientRect().height && count==1){
  45.         count--;
  46.         eval(functionString)
  47.     }
  48. }
  49.  
  50. </head>
  51.  
  52. <br />
  53. <br />
  54. <br />
  55. <br />
  56. <br />
  57. <br />
  58. <br />
  59. <br />
  60. <br />
  61. <br />
  62. <br />
  63. <br />
  64. <br />
  65. <br />
  66. <br />
  67. <br />
  68. <br />
  69. <br />
  70. <br />
  71. <br />
  72. <br />
  73.  
  74. <br />
  75. <br />
  76. <br />
  77. <br />
  78. <br />
  79. <br />
  80. <br />
  81. <br />
  82. <br />
  83. <br />
  84. <br />
  85. <br />
  86. <br />
  87. <br />
  88. <br />
  89. <br />
  90. <br />
  91. <br />
  92. <br />
  93. <br />
  94. <br />
  95. <br />
  96. <br />
  97. <br />
  98. <br />
  99. <br />
  100. <br />
  101. <br />
  102. <br />
  103. <br />
  104. <br />
  105. <br />
  106. <br />
  107. <br />
  108. <br />
  109. <br />
  110. <br />
  111. <br />
  112. <br />
  113. <br />
  114. <br />
  115. <br />
  116. <br />
  117. <br />
  118. <br />
  119.  
  120. <p id="target" style="height:450px;">target</p>
  121. <br />
  122.  
  123.  
  124. </body>
  125. </html>
__________________
http://www.danielcarvajal.es
  #4 (permalink)  
Antiguo 07/01/2014, 05:47
Eux
 
Fecha de Ingreso: octubre-2010
Mensajes: 60
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Saber cuando una parte de la web esta en pantalla

Para empezar gracias a los dos por responder.

Para danny_, he copiado tu código que por lo que veo está preparado ya para funcionar con la <p> y su id="target" y que me salte el alert pero no me funciona...¿falta añadir algo más para que al menos dé un alert? ¿lo has probado?

Gracias.
  #5 (permalink)  
Antiguo 07/01/2014, 12:35
Avatar de danny_  
Fecha de Ingreso: septiembre-2012
Mensajes: 95
Antigüedad: 11 años, 7 meses
Puntos: 4
Respuesta: Saber cuando una parte de la web esta en pantalla

umm... es raro, debería funcionarte en cualquier navegador, te da algún error en firebug?? Si te sale algún error dime cual a ver como puedo solucionarlo.

Has copiado el código tal cual está? incluido etiquetas html??

El alert solo debería saltarte una sola vez, una vez salta aunque vuelvas a hacer scroll no tiene porque activarse, esta función la realicé para poder activar una animación cuando el usuario llegara al div donde estaba aplicada dicha animación, pero puedes usarla con cualquier otra función o alert.

Un saludo!
__________________
http://www.danielcarvajal.es
  #6 (permalink)  
Antiguo 09/01/2014, 04:38
Eux
 
Fecha de Ingreso: octubre-2010
Mensajes: 60
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Saber cuando una parte de la web esta en pantalla

Hola danny_,

Si si, he copiado todo el código tal como me lo has puesto y no me ha ido, con el firebug ejecutado entonces si me va, la verdad es que no entiendo porque. Bueno al final he encontrado una librería que se llama jquery-visible-master por si le sirve a alguien que me lo ha solucionado. Aunque a medias, dado que este código estará dentro de un iframe(de 50x50), y este iframe estará en una página de un tercero sin saber en qué posición estará, se supone que cuando el usuario tenga visible dicho iframe es cuando salta un evento (alert en este caso). Lo que está pasando es que nada más cargarse la página de este tercero salta el evento del iframe aún sin estar visible. No sé si me he explicado ya que lo que quiero hacer es un poco lioso uffff...quizas si me funciona tu código no le pasará lo de esta librería, o es que de todas formas estoy haciendo algo mal por concepto.

Saludos.

Gracias.
  #7 (permalink)  
Antiguo 10/01/2014, 04:42
Avatar de danny_  
Fecha de Ingreso: septiembre-2012
Mensajes: 95
Antigüedad: 11 años, 7 meses
Puntos: 4
Respuesta: Saber cuando una parte de la web esta en pantalla

Me parece muy raro que sólo te funcione cuando tienes activo firbug.... Te has asegurado de que tu navegador tenga activo la ejecución de scripts?? Qué navegador usas?? intenta correr el script en otro navegador y verás que te funcionará.

Saludos!!
__________________
http://www.danielcarvajal.es
  #8 (permalink)  
Antiguo 14/01/2014, 09:02
Eux
 
Fecha de Ingreso: octubre-2010
Mensajes: 60
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Saber cuando una parte de la web esta en pantalla

Danny_, sigue sin funcionarme, de todas maneras no te preocupes dado que yo quería eso para poder luego poner un iframe al fondo de una página de terceros y cuando la gente tenga el iframe en pantalla que me mande al servidor un aviso, y tu código aunque me funcionara, al estar dentro de la página a la cual llama el iframe, el usuario debería hacer scrollingo en esta página a la que llama el iframe para que salte la solicitud al servidor, sino aunque esté en pantalla no reacciona ya que no salta el evento :( :(
  #9 (permalink)  
Antiguo 15/01/2014, 10:05
Avatar de SinguerInc  
Fecha de Ingreso: octubre-2007
Ubicación: Barcelona, España
Mensajes: 551
Antigüedad: 16 años, 6 meses
Puntos: 5
Respuesta: Saber cuando una parte de la web esta en pantalla

Hola, puedes hacerlo con ésta librería:

http://imakewebthings.com/jquery-waypoints

Simplemente tienes que decirle qué función ejecutar cuando el objeto se visualiza en pantalla.

Saludos, pásate por mi blog!
__________________
/blog.singuerinc.com

Etiquetas: pantalla, parte
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:21.