2010-10-04 9 views
0

J'ai un iFrame qui, lorsqu'il est chargé, s'étend sur toute sa longueur sans barres de défilement.
Après 1 seconde, je veux faire défiler jusqu'à une ancre dans le iFrame.jQuery contents() trouve la hauteur de page du lien d'ancrage dans iFrame

Je pense que je dois avoir sa hauteur?
Comment est-ce que je peux faire ceci?

HTML:

<iframe id="help-frame" src="help.php" scrolling="no"><\/iframe> 

JS:

$("#help-frame").load(function() { 
    document.getElementById("help-frame").style.height = 
    document.getElementById("help-frame").contentWindow.document.body.offsetHeight + 'px'; 
    setTimeout(iScroll, 1000); 
}); 
function iScroll() { 
    var anchorH = $("#help-frame").contents().find("a.ordering").height(); 
    alert(anchorH); 
    // smooth scroll to #ordering 
} 

HTML help.php:

<!-- added a class as well --> 
<a name="ordering" class="ordering"></a> 
<h2>Ordering</h2> 
... long content ... 

Répondre

1

Vous n'avez pas besoin de re-requête help-frame dans un gestionnaire d'événements. this fera référence à l'objet de l'invocation.

$('#help-frame').load(function(){ 
    var self = $(this); 
    setTimeout(function() { 
     var pos = self.contents().find('a.ordering').offset(); 
     self.animate({scrollTop: pos.top}, 1000); 
    }, 1000); 
}); 
+0

Merci une tonne Andy, quelques trucs de plus pour le sac. Parce que je préfère animer la page principale, pas le contenu iFrame (pas de barres de défilement, 100% de hauteur) J'ai utilisé $ ("html, body"). Animate() – FFish

+0

Y at-il un moyen de trouver le nom = "ordering" de la classe btw? – FFish

+2

@FFish: si le nom est un attribut, vous pouvez l'interroger avec '$ ('a [name = ordering]')' – jAndy