Défilement de texte

Résolu
Makdoom Messages postés 9 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 11 mai 2010 - 11 mai 2010 à 12:49
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 ;)

6 réponses

dj_ouf Messages postés 221 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 6 septembre 2011
11 mai 2010 à 17:05
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.
3
dj_ouf Messages postés 221 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 6 septembre 2011
11 mai 2010 à 14:23
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 :)
0
Makdoom Messages postés 9 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 11 mai 2010
11 mai 2010 à 15:23
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.
0
dj_ouf Messages postés 221 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 6 septembre 2011
11 mai 2010 à 16:06
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;}
};
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Makdoom Messages postés 9 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 11 mai 2010
11 mai 2010 à 16:18
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)
0
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
en effet, en supprimant la ligne "masque.filters = [filtre];" le texte s'affiche directement. Merci pour ton aide :)
0
Rejoignez-nous