2010-05-18 18 views
2

J'utilise un shadowbox qui génère un iframe pour afficher les détails du produit sur une page. Parce que la page de détails peut être assez longue, le client aimerait un bouton "Plus" qui fait défiler la page vers le bas (apparemment la barre de défilement sur la droite de l'iframe ne suffit pas).Comment faites-vous défiler un iframe depuis l'intérieur en utilisant jquery?

Voici le code que j'ai essayé afin d'obtenir l'iframe pour faire défiler:

$(document).ready(function() 
{ 
$(".moreButton img").click(function() { 
    scrollbottom(); 
}); 
}); 

function scrollbottom() { 
var x = 250; // this number is a temporary placeholder 
var t = 500; 
$("iframe").animate({ scrollTop: x }, t); 
} 

J'ai aussi essayé d'utiliser le corps au lieu de iframe, mais en vain. Des idées? Merci!

Répondre

1

Cela a fini par travailler:

$('html,body').animate({ scrollTop: x }, t); 
+1

Est-ce que la ligne ci-dessus a résolu votre problème? Je reçois le même problème mais je n'arrive pas à résoudre par la ligne ci-dessus – mack

+0

Oui, cela a fini par travailler pour moi. Le seul conseil que je vous donnerais est de s'assurer que la portée de votre fonction est correcte. Si votre code est dans l'iframe lui-même, rappelez-vous qu'il ne s'exécutera pas automatiquement comme sur une page fraîchement chargée. Vous devrez l'invoquer à partir du cadre parent. –

1

Comme ceci: (Tested)

$("iframe").contents().children().animate({ scrollTop: x }, t); 
+0

$ ('iframe') contenu() animés (.. {scrollTop: x}, t); Cela ne semble pas fonctionner non plus. –

+0

Cela fonctionne pour moi. (Dans Firefox, au moins) – SLaks

+0

Ne semble pas fonctionner dans Chrome –

1

Dans Chrome je devais choisir spécifiquement l'élément du corps:

$('#my-iframe').contents().find('body').animate({scrollTop:90},500);

0

Créer une fonction dans le parent javascript comme ceci:

function scrollToPoint(top) { 
    $("html, body").animate({ scrollTop: top }, "slow") 
} 

et appeler cette fonction au sein de l'iframe comme ceci:

window.parent.scrollToPoint(top); 

Il devrait fonctionner en chrome, non testé dans Firefox encore