2009-03-25 7 views
21

Wie kann ich eine Scrollbar-Präsenz (mit Javascript) in HTML iFrame erkennen?Wie kann ich eine Scrollbar-Präsenz (mit Javascript) in HTML iFrame erkennen?

Ich habe bereits versucht:

 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 
    } 

Und ich hatte auch versucht:

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

ohne Erfolg ..

ich die javascript objets gesucht auf DOM Inspec tor, aber nichts gefunden.

Ist es möglich, eine Scrollbar Präsenz in einem iframe in javacscript zu erkennen?


Der Iframe-Inhalt stammt aus derselben Domäne.

Kein Erfolg bis jetzt ..

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

Antwort

10

Mit jQuery Sie die Dokumentenhöhe vergleichen, die scrollTop Position und die Darstellungshöhe, mit dem Sie die Antwort, die Sie benötigen könnten bekommen.

Etwas entlang der Linien von:

$(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

Vielen Dank für Ihre Antwort, aber Ihr Code testet nur, wenn ich versuche, die Bildlaufleiste zu verschieben. Ich möchte es beim Laden der Seite testen. – Bonfocchi

+1

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

+2

Es tut mir leid, aber das ist keine richtige Lösung. :(Ihr Code überprüft tatsächlich, ob das Dokument nach unten gescrollt ist. Hier ist ein Beweis: http://jsfiddle.net/vvdb0292/2/ Ich denke, Bobincts Antwort ist korrekt. – kaboom

1

ich das nicht denken kann getan werden, wenn der iframe Inhalt aus einer anderen Domäne Sicherheitseinschränkungen aufgrund JavaScript kommt.

EDIT:. In diesem Fall etwas entlang der Linien von den Iframe einen Namen geben = 'someframe' und id = 'someframe2' und dann Frames zu vergleichen [ 'someframe'] document.body.offsetWidth mit document.getElementById ('someframe2'). offsetWidth sollte Ihnen die Antwort geben.

+1

Der Iframe-Inhalt stammt aus der gleichen Domäne. – Bonfocchi

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

Dieser erkennt, ob es eine für eine Scrollbar Notwendigkeit ist. Für den Standard von iframes ist das dasselbe wie ob eine Bildlaufleiste ist, aber wenn Bildlaufleisten ein- oder ausgeschaltet sind (mit dem 'Scrolling = "Ja"/"Nein"' Attribut im übergeordneten Dokument oder CSS 'Überlauf) : scroll/hidden 'im iframe-Dokument), dann kann dies abweichen.

+1

genial, danke – Sebas

+0

Das sollte die Antwort sein – Julian

+0

Warum testest du für 'BackCompat' statt nur das 'documentElement' in allen compat-Modi? – bab

0

Ich denke, Ihr zweiter Versuch ist auf dem richtigen Weg. Außer this sollten Sie versuchen, scrollen/überprüfen 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; 
} 

verbesserte-verändert ein wenig von Jon`s Winstanley Code

0

ich gefunden habe, dies auf ein beliebiges Element funktioniert, zumindest auf Chrome:

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

horizontale Scrollbalken die detektiert werden kann dasselbe, unter Verwendung von Width anstelle von Height.

Verwandte Themen