"auto-scrolling" sur un swf dans une page html

Soyez le premier à donner votre avis sur cette source.

Vue 6 666 fois - Téléchargée 937 fois

Description

J'ai travaillé - il y a quelques temps - sur des projets en Flash dans lesquels les SWF étaient assez grand dans les pages html. Un problème de navigation avec le scroll était récurent.
En effet lorsque vous passez ou cliquez sur un SWF dans une page html, le focus est sur celui-ci et il n'y a plus la possibilité d'utiliser la molette pour naviguer sur la page.
Donc j'ai contourné le problème en appelant tout simplement la fonction javascript window.scrollBy() depuis Flash (et oui, c'est possible :P).

Dans le zip vous trouverez deux swf et pages html : un sans le code, l'autre avec.

REMARQUE : pour tester la source il faut placer ces pages html sur un serveur : en local ou en distant. Sinon Flash bloque l'appel de la fonction js. Peut être qu'on peut éviter cela en plaçant le js directement dans la page (j'ai la flemme d'essayer ^^)

Source / Exemple :


var o:Object = new Object();
o.onMouseWheel = function( dx:Number ) :Void {
	getURL("javascript:window.scrollBy(0," + dx * -10 + ")");
}
Mouse.addListener( o );

Conclusion :


Ce code n'a rien de giga-supra-atomique.
C'est juste un snippet que j'avais envie de faire partager :)

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
3
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
27 avril 2009

Bonjour,

je suis tombée sur ce post parce que je recherche exactement .... l'inverse !

en effet, je suis très étonnée par ce post car mon problème réside dans le fait que j'utilise la molette pour faire défiler du contenu au sein même de mon swf, ce qui fonctionne parfaitement... sauf si la page HTML dispose d'un contenu scrollable.

Je ne suis peut-être pas assez claire...

En fait, si le contenu de ma page HTML occupe plus de place que l'affichage le permet et donc fait apparaître un ascenseur pour pouvoir scroller, c'est le scroll de la page HTML qui a la priorité sur le scroll de mon swf :-(

Même si je donne le focus à mon swf en cliquant dessus, la molette agit d'abord sur le scroll de la page et, si j'arrive en butée, mon swf récupère les mouvements de la molettes pour scroller son propre contenu comme je le lui avais gentiment demandé.

J'avoue être paumée du coup.

vous semblez tous dire que si le SWF a le focus le scroll s'applique ne s'applique plus à la page HTML :-(

flash 10.0.r12 FF3.0.9
Messages postés
1378
Date d'inscription
samedi 9 octobre 2004
Statut
Membre
Dernière intervention
1 novembre 2010
1
...?
Ce bug arrive même quand tu n'as pas de texte dynamique sur ta scène. Je ne parle pas de la molette sur des textes associés à des scrollbar mais à tous les SWF.
Messages postés
1
Date d'inscription
jeudi 24 février 2005
Statut
Membre
Dernière intervention
2 mars 2009

Salut bali_balo, je crois qu'en mettant le texte sélectable tu peux utiliser la molette sans problème.
Messages postés
1378
Date d'inscription
samedi 9 octobre 2004
Statut
Membre
Dernière intervention
1 novembre 2010
1
Merci pour ton post Blacknight91titi.
Mais encore une fois je n'ai pas du tout pensé à la compatibilité avec tous les navigateurs et comme les projets que j'ai fait sont en AS2, j'ai déposé mon snippet tel quel.
Donc je vais reprendre ma source en le codant en AS3 (en gros reprendre ton code si tu me le permets) et tester sur un max de navigateur et versions.
Messages postés
1732
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
9 mars 2015
2
Ah mais c'est de l'ActionScript 2 !

Pas sûr que la classe ExternalInterface existe, bien que... j'ai le vague souvenir de m'en être déjà servit avant de passer à AS3.

"REMARQUE : pour tester la source il faut placer ces pages html sur un serveur : en local ou en distant. Sinon Flash bloque l'appel de la fonction js. "
Pour ma part, pas eu de soucis sur Google Chrome.

Pour ce qui est du même résultat dans les deux pages : Elles semblent similaire. Le résultat est le même (fonctionnel).

Pour la version AS3 :
stage.addEventListener(MouseEvent.MOUSE_WHEEL, mouseWheel);
function mouseWheel(Evt:MouseEvent):void {
if (ExternalInterface.available)
ExternalInterface.call("scroll",Evt.delta);
else
trace("Le Player n'est pas executer dans une page html");
}

Et coté javascript
function scroll(Sens) {
window.scrollBy(0,-Sens*10);
}

Coté Javascript, a confirmer, je n'ai fait que reprendre ton code.

Blacknight
www.osteres.com
Afficher les 12 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.