2009-12-05 14 views
16

Element scrollTop jQuery zwraca wartość null, gdy okno jest ramką iframe. Czy ktoś był w stanie dowiedzieć się, jak uzyskać scrollTop iframe?Jak uzyskać scrollTop elementu iframe

więcej info:

mój skrypt jest uruchomiony w samej iframe, okno rodzic jest w innej domenie, więc nie może uzyskać dostępu do identyfikatora iframe lub coś podobnego

+0

Starasz się dostać go od wewnątrz rodzic "iframe" lub z samego "iframe"? –

+1

z samego elementu iframe. źle dodać więcej informacji na moje pytanie – mkoryak

Odpowiedz

10

Można ustawić scrollTop przy użyciu tej konfiguracji:

$("html,body").scrollTop(25); 

więc można próbować coraz to tak:

$("html,body").scrollTop(); 

Ponieważ różne przeglądarki ustawiają scrollTop na różnych elementach (treści lub html).

Od wtyczki scrollTo:

Ale to chyba jeszcze nie w niektórych przeglądarkach. Oto odnośny odcinek od kodu źródłowego Ariel Flesher's scrollTo plugin for jQuery:

// Hack, hack, hack :) 
// Returns the real elements to scroll (supports window/iframes, documents and regular nodes) 
$.fn._scrollable = function(){ 
    return this.map(function(){ 
    var elem = this, 
     isWin = !elem.nodeName || $.inArray(elem.nodeName.toLowerCase(), ['iframe','#document','html','body']) != -1; 

    if(! isWin) { 
     return elem; 
    } 


    var doc = (elem.contentWindow || elem).document || elem.ownerDocument || elem; 

    return $.browser.safari || doc.compatMode == 'BackCompat' ? 
     doc.body : 
     doc.documentElement; 
    }); 
}; 

Następnie można uruchomić:

$(window)._scrollable().scrollTop(); 

Aby ustalić, jak daleko iframe przewinął dół.

+0

Dzięki człowieku. który działa jak wdzięk – mkoryak

+0

nie działa dla mnie, ale rodzic. $ ('body'). scrollTop() wykonał zadanie –

+0

Musiałem ustawić wartość dla scrollTop, więc mała regulacja: '$ (" html, body "). scrollTop (0);' –

19

Znalazłem to pytanie podczas próby SET scrollTop wewnątrz iframe ... nie dokładnie Twoje pytanie (chciałeś GET), ale tutaj jest rozwiązanie wewnątrz iframe dla osób, które również tutaj kończy się próby SET.

Jeśli chcesz, aby przewinąć do góry strony będzie to nie działa wewnątrz iframe:

$("html,body").scrollTop(0); 

Jednak to będzie działać:

document.getElementById("wrapper").scrollIntoView(); 

Albo equivilent z jQuery :

$("#wrapper")[0].scrollIntoView(); 

Dla tego znacznika (zawiera insi de iframe):

<html> 
    <body> 
    <div id="wrapper"> 
     <!-- lots of content --> 
    </div> 
    </body> 
</html> 
+1

Dzięki za ten punkt @chris. W przeglądarce Firefox, tylko DOM scrollIntoView działał na stronie, która była wewnątrz elementu iframe (Google Chrome działa tylko z $ ("body"). ScrollTop (0);). Dla miłośników jquery jest to $ ("# wrapper") [0] .scrollIntoView(); – rsmoorthy

+0

tylko ten wydaje się działać w IE8 ... dzięki – handsomeGun

+1

bardzo ładne. spoza elementu iframe 'document.getElementsByTagName ('iframe') [0] .contentWindow.document.getElementById ('myElementId'). scrollIntoView();' – billynoah

5

Good old javascript:

scrollTop = document.getElementById(IFRAME_ID).contentWindow.document.body.scrollTop; 
+0

Nie działa, gdy JS działa wewnątrz elementu iframe. – mikemaccana

+2

Dla javascript wewnątrz iframe, zostaw część, która zwraca samą iframe: 'scrollTop = document.body.scrollTop;' –

25
$('#myIframe').contents().scrollTop() 
+0

Nie wiem o OP, ale to rozwiązało to dla mnie przez całą drogę. Miałem do czynienia z iframe i całkowicie zapomniałem zastosować scrollTop() do jego zawartości. Duh! –

+0

Pozdrawiam. To działało idealnie dla mojej sprawy - iframe zajmowało 100% widoku z załadowanym modalem/nakładką. Dzięki! –

+0

nie działa, zwraca wartość null –

0

lub używać ten

sample.showLoader = function() { 
// show cursor wait 
document.getElementsByTagName('body')[0].style.cursor = 'wait'; 
var loader = $('#statusloader'); 
// check if we're runnign within an iframe 
var isIframe = top !== self; 
if (isIframe) { 
    var topPos = top.pageYOffset + 300; 
    // show up loader in middle of the screen 
    loader.show().css({ 
     top : topPos, 
     left : '50%' 
    }); 
} else { 
    // show up loader in middle of the screen 
    loader.show().css({ 
     top : '50%', 
     left : '50%' 
    }); 
} 
}; 
2
$('#myIframe').contents().scrollTop(0); 

działa tylko z "0" jako parametr

+0

Jeśli podano argument "0", ramka zostanie przewinięta do góry (0 pikseli od góry). Bez argumentu zwrócona zostanie ilość pikseli od góry => o to właśnie chodzi! –

0

Wiem, że spóźniłem się na grę tutaj, ale próbowałem to rozgryźć na długiej liście na urządzeniach mobilnych. scrollTop() nie działa dla mnie z powodu konfliktów między domenami (i nie mam dostępu do okna nadrzędnego), ale nie zmienia wysokość:

$('#someClickableElementInIFrame').on('click', function(e){ 
     $("html body").animate({ 
     'height' : "0" 
    }, { 
     complete: function(){ 
      $("html body").css({ 
      'height' : "auto" 
      }) 
      } 
     }) 
}); 
Powiązane problemy