Aller au contenu | Aller au menu | Aller à la recherche

Site membre du réseau Izardev et LCNET

Images dans un Textfield AS3

Il est parfaitement possible d'ajouter des images dans un TextField dynamique Flash en Actionscript 3, cependant, cette fonctionnalité n'est pas dépourvue de comportements étranges. Ayant pas mal miséré dessus, je livre ici le résultat de cette galère.

Création du Textfield et insertion de l'image

On crée le TextField en question, et on y insère l'image grâce à la propriété htmlText, ensuite, on l'ajoute à notre animation courante :

var t:TextField = new TextField();
t.htmlText = '<img src="mon_image.jpg">';
this.addChild(t);

Et là, ça ne fonctionne pas ! Pourquoi ?

Pour une raison obscure, l'image n'apparaît pas, si vous êtes confronté à ce problème, rassurez-vous, vous n'avez rien fait de mal, car la solution est ... bête, comme illustré ci-dessous, il suffit d'ajouter un espace avant l'ouvrir la balise HTML.

t.htmlText = '<img src="mon_image.jpg">'; //ne fonctionne pas
t.htmlText = ' <img src="mon_image.jpg">'; //fonctionne
t.htmlText = '&amp;<img src="mon_image.jpg">'; //fonctionne

Voici déjà un problème de résolu.

Manipuler l'image chargée dynamiquement

Peut-être même vous êtes vous arraché les cheveux en tentant vainement quelque chose dans cet esprit :

t.htmlText = '<a href="http://www.ligams.com"><img src="mon_image.jpg"></a>';

Cela ne fonctionne pas non plus. Mauvaise nouvelle, il va falloir gérer les événements avec un objet Loader.

Récupérer l'image

Tout d'abord, il faudra ajouter un identifiant à l'image, nous nommerons cet identifiant mon_image :

t.htmlText = ' <img src="mon_image.jpg" id="mon_image">';

Récupérer l'image grâce à la méthode getImageReference() :

oImage:DisplayObject = t.getImageReference("mon_image");

Ajouter des événements

Ajoutons maintenant des événements à cette image, au clic

//récupère l'image
oImage:DisplayObject = t.getImageReference("mon_image");
var loader:Loader = Loader(oImage);
//ajout d'un écouteur lorsque le chargement de l'image est terminé
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadedImage);

//Image chargée, on attache l'événement qui fait le lien
function loadedImage(e:Event):void
{
    var li:LoaderInfo = LoaderInfo(e.target);
    li.content.addEventListener( MouseEvent.CLICK, clickImage );
    li.loader.addEventListener( MouseEvent.CLICK, clickImage );
}
//lien vers le site de votre choix
function clickImage( e:MouseEvent ):void
{
    var url:URLRequest = new URLRequest("http://www.ligams.com");
    navigateToUrl(url); 
}

Voilà, on peut également gérer des redimensionnements ou un peu tout, comme avec un Loader classique.
J'espère que cet article pourra être utile, il l'aurait bien été pour moi en tout cas :)

Partagez cet article !

  • Delicious
  • Stumbleupon
  • Digg
  • Facebook
  • Google
  • Linkedin
  • Yahoo Buzz
  • Twitter
Vous avez apprécié cet article ?

Commentaires S'abonner au flux RSS des commentaires

  1. kamelito | Images dans un Textfield AS3 |
    Merci ! ca fait des heures que je cherche comment accéder aux images présentent dans un htmlText.
  2. IncludE | Implémetation Ajax AutoComplete |
    Merci pour cet article, qui est très clair.
    Je me hâte de poser un commentaire, du fait que j'ai déjà été confronté à cette technique...

    En effet, cela permet de faire un auto complète dont l'indicateur de chargement est un petit picto dans le TextField.

    Un simple écouteur de changement permet le déclenchement de recherche de similarité en renvoyant un flux XML de mots à soumettre. Le picto change dès que le champ TextField est modifié (au niveau du texte) grace à la méthode getImageReference...

    Le reste est un jeu d'enfants ;)


Ajouter un commentaire

Les commentaires sont tous validés par un modérateur, votre commentaire n'apparaît pas directement sur le site.
Aucun support n'est assuré ici, vous pouvez néanmoins laisser vos remarques et critiques sur l'article, les points de vue pertinents sont toujours les bienvenus.