2009-03-25 14 views
21

¿Cómo puedo detectar una presencia en la barra de desplazamiento (usando Javascript) en HTML iFrame?¿Cómo puedo detectar una presencia en la barra de desplazamiento (usando Javascript) en HTML iFrame?

Ya he probado:

 var vHeight = 0; 
     if (document.all) { 
      if (document.documentElement) { 
      vHeight = document.documentElement.clientHeight; 
      } else { 
      vHeight = document.body.clientHeight 
      } 
    } else { 
     vHeight = window.innerHeight; 
    } 

    if (document.body.offsetHeight > vHeight) { 
     //when theres a scrollbar 
    }else{ 
     //when theres not a scrollbar 
    } 

Y yo también había intentado:

  this.scrollLeft=1; 
    if (this.scrollLeft>0) { 
     //when theres a scrollbar 
     this.scrollLeft=0; 
     }else{ 
     //when theres not a scrollbar 
     return false; 
    } 

sin éxito ..

He buscado los objetos de javascript en DOM Inspec tor, pero no encontró nada.

¿Es posible detectar una presencia de barra de desplazamiento en un iframe en javacscript?


El contenido de iframe viene del mismo dominio.

Sin éxito hasta ahora ..

alt text http://www.upvtp.com.br/file.php/1/help_key.jpg

Respuesta

10

Usando jQuery se puede comparar la altura del documento, la posición y la altura scrollTop puerto de vista, lo que podría conseguir que la respuesta que necesita.

Algo a lo largo de las líneas de:

$(window).scroll(function(){ 
    if(isMyStuffScrolling()){ 
    //There is a scroll bar here! 
    } 
}); 

function isMyStuffScrolling() { 
    var docHeight = $(document).height(); 
    var scroll = $(window).height() + $(window).scrollTop(); 
    return (docHeight == scroll); 
} 
+0

Gracias por su respuesta, pero su código solo se prueba cuando intento mover la barra de desplazamiento. Quiero una prueba en la carga de la página. – Bonfocchi

+1

$ .ready (function() {}); –

+2

Lo siento, pero esta no es una solución correcta. :(Su código realmente verifica si el documento se desplaza hacia abajo. Aquí hay una prueba: http://jsfiddle.net/vvdb0292/2/. Creo que la respuesta de Bobince es correcta. – kaboom

1

No creo que esto se puede hacer si el contenido anidado proviene de otro dominio debido a las limitaciones de seguridad de JavaScript.

EDIT:. En ese caso, algo en la línea de dar el iframe un nombre = 'someframe' y el ID 'someframe2' = y luego comparar los marcos [ 'someframe'] document.body.offsetWidth con document.getElementById ('someframe2'). offsetWidth debería darle la respuesta.

+1

El contenido del iframe proviene del mismo dominio. – Bonfocchi

37
var root= document.compatMode=='BackCompat'? document.body : document.documentElement; 
var isVerticalScrollbar= root.scrollHeight>root.clientHeight; 
var isHorizontalScrollbar= root.scrollWidth>root.clientWidth; 

Este detecta si existe la necesidadde una barra de desplazamiento. Para el valor predeterminado de iframes, esto es lo mismo que si es una barra de desplazamiento, pero si las barras de desplazamiento se activan o desactivan (utilizando el atributo 'scrolling =' yes '/' no '' en el documento padre o CSS 'overflow : scroll/hidden 'en el documento iframe) entonces esto puede diferir.

+1

impresionante, gracias – Sebas

+0

Esta debería ser la respuesta – Julian

+0

¿Por qué prueba para 'BackCompat' en lugar de simplemente usar 'documentElement' en todos los modos compatibles? – bab

0

Creo que su segundo intento está en el camino correcto. Excepto en lugar de this, debe intentar desplazarse/verificar document.body.

3
$(window).scroll(function(){ 
    if(isMyStuffScrolling()){ 
//scrolling 
    }else{ 
//not scrolling 
} 
}); 

function isMyStuffScrolling() { 
    var docHeight = $(document).height(); 
    var scroll = $(window).height() ;//+ $(window).scrollTop(); 
    if(docHeight > scroll) return true; 
    else return false; 
} 

-mejorada cambió un poco de código Jon`s Winstanley

0

he encontrado que esto funciona en cualquier elemento, al menos en Chrome:

hasVerticalScrollbar = (element.scrollHeight > element.offsetHeight) 
     || 
(element.scrollHeight > element.clientHeight 

barras de desplazamiento horizontales se pueden detectar el lo mismo, usando Width en lugar de Height.

Cuestiones relacionadas