Défilement de texte [Résolu]

Messages postés
9
Date d'inscription
samedi 4 avril 2009
Statut
Membre
Dernière intervention
11 mai 2010
- - Dernière réponse : Makdoom
Messages postés
9
Date d'inscription
samedi 4 avril 2009
Statut
Membre
Dernière intervention
11 mai 2010
- 11 mai 2010 à 17:58
Bonjour,

J'ai récupéré une source sur le net mais qui ne fonctionne pas exactement comme je voudrais. Voici le code en question :
monTexte=""+_root.thetext+"

";
vxmin = 0;
vxmax = 5;
vx = 0.5*(vxmin+vxmax);
 
monStyle = new TextField.StyleSheet();
monStyle.setStyle("p", {fontFamily:'OCRAstd', fontSize:'13px', color:'#00aa00'});
monStyle.setStyle("a", {fontFamily:'Arial', fontSize:'13px', color:'#FF0000'});
monStyle.setStyle("a:hover", {fontFamily:'Arial', fontSize:'11px', textDecoration:'underline', color:'#FF9900'});
 
this.createEmptyMovieClip("monClip", 0);
monClip.cacheAsBitmap = true;
 
monClip.createTextField("monChampDeTexte", 0, 0, 0, 0, 0);
 
with (monClip.monChampDeTexte) {
autoSize = true;
html = true;
styleSheet = monStyle;
htmlText = monTexte;
selectable = false;
border = false;
largeur = _width;
hauteur = _height;
}
 
xRight = 650;
xLeft = 10;
 
this.createEmptyMovieClip("masque", 1);
 
masque._x = monClip._x=xLeft;
masque._y = monClip._y=5;
 
masque.beginFill(0, 100);
masque.moveTo(0, 0);
masque.lineTo(xRight-xLeft, 0);
masque.lineTo(xRight-xLeft, hauteur);
masque.lineTo(0, hauteur);
masque.lineTo(0, 0);
masque.endFill();
 
blurX = 30; 
filtre = new flash.filters.BlurFilter(blurX, 0, 1);
masque.filters = [filtre];
 
monClip.setMask(masque);
 
monClip.onEnterFrame = function() {
var dy = Math.abs(this._ymouse-0.5*hauteur);
if (dy>0.5*hauteur) {vx vxmin+(vxmax-vxmin)*dy/Stage.height;} else {vx vxmin;}
this._x -= vx;
if (this._x<xLeft-largeur) {this._x = xRight;}
};



tout marche bien excepté le fait que le texte ne se met à défiler que si l'on passe la souris dessus, or moi je cherche a ce qu'il défile dès le chargement de la page web.
J'ai essayé de changer le "onEnterFrame" par du "onLoad", j'ai aussi essayé de remplacé ca par un setinterval mais rien n'y fait, sans la souris qui passe dessus, rien ne défile :/
Je ne connais rien a flash donc je suis assez vite dépassé ^^ si quelqu'un a la soluce, je suis a l'écoute ;)
Afficher la suite 

6 réponses

Meilleure réponse
Messages postés
221
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
6 septembre 2011
3
Merci
onEnterFrame, c'est la fonction déclenché à chaque rafraichissement du flashplayer, donc autant de fois que de frames jouées par secondes. Par contre frame suppose une frame de la timeline, pas un objet.

Si tu as des problèmes de visibilité du clip, cela pourrait provenir du masque. Désactives le si tu veux en être sûr.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 191 internautes nous ont dit merci ce mois-ci

Commenter la réponse de dj_ouf
Messages postés
221
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
6 septembre 2011
0
Merci
Salut

Tout se passe dans la fonction onEnterFrame :
var dy = Math.abs(this._ymouse-0.5*hauteur);
if (dy>0.5*hauteur) {vx vxmin+(vxmax-vxmin)*dy/Stage.height;} else {vx vxmin;}
this._x -= vx;
if (this._x<xLeft-largeur) {this._x = xRight;}


Si on traduit ça, on voit qu'il calcule la distance entre la position verticale de la souris (_ymouse) et la position verticale de monClip. Si cette distance est supérieure à la moitié de sa hauteur (if (dy>0.5*hauteur), alors on fait défiler, sinon il défile à la vitesse minimale définit, qui est ici "vxmin". Or "vxmin" est égal à 0 comme on peut le voir tout en haut du code, donc il te suffirait de le redéfinir à 5 par exemple pour voir qu'il défilerait en continue !

Voici, en espérant t'avoir un peu éclairé, et que tu y voit + clair dans la logique du code :)
Commenter la réponse de dj_ouf
Messages postés
9
Date d'inscription
samedi 4 avril 2009
Statut
Membre
Dernière intervention
11 mai 2010
0
Merci
Merci d'avoir répondu ^^
Malheureusement ca ne marche pas plus, en mettant vxmin à 5 la vitesse ne change plus (normal) mais le texte ne se met a défiler quand meme qu'a partir du moment ou la souris l'a survolé :/

Je crois que les calculs de distance (et donc la détermination de la vitesse) se font par rapport aux coordonnées dans le clip, mais l'objet flash n'est qu'une partie du site, et tant que la souris reste en dehors il n'y a pas de défilement ...

Je continue de tester des trucs mais jusqu'ici je ne trouve rien qui aille.
Commenter la réponse de Makdoom
Messages postés
221
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
6 septembre 2011
0
Merci
J'ai testé le code en créant un nouveau doc flash, j'ai bien le texte défilant en auto directement.
Effectivement si ce flash est englobé dans un site, le comportement peut-être différent.

Si tu veux faire un défilement indépendamment de la position du curseur de la souris, tu peux toujours ordonner un défilement avec une constante :
monClip.onEnterFrame = function() {
this._x -= vx;
if (this._x<xLeft-largeur) {this._x = xRight;}
};
Commenter la réponse de dj_ouf
Messages postés
9
Date d'inscription
samedi 4 avril 2009
Statut
Membre
Dernière intervention
11 mai 2010
0
Merci
Toujours pareil :/
Je vais peut etre dire une betise mais "onEnterframe" est ce que ca ne suppose pas que justement ca nécessite que la souris entre dans la frame (objet ?) ?

ou peut etre faut il ajouter un monClip.visible = true; quelque part pour qu'il oit visible dès le début ? (quand j'attend quelques secondes avant de passer la souris sur le champ de texte celui ci commence a défiler a une position qui laisse supposer qu'il défilait deja mais sans etre visible)
Commenter la réponse de Makdoom
Messages postés
9
Date d'inscription
samedi 4 avril 2009
Statut
Membre
Dernière intervention
11 mai 2010
0
Merci
en effet, en supprimant la ligne "masque.filters = [filtre];" le texte s'affiche directement. Merci pour ton aide :)
Commenter la réponse de Makdoom