29 juil 2007
Les composants graphiques :: étude de cas : le bouton
Article publié dans la catégorie javascript, javascript | lu 4363 fois |
Cet article est le deuxième d’une série de tutoriaux sur les composants graphiques.
Dans le premier article nous avions vu comment cibler un nœud du DOM et interagir avec cet élément.
Nous avions crée la classe custumInput qui permettait de modifier et d’ajouter des comportement a un élément Input.
Dans ce tutorial nous allons voir comment modifier intégralement l’aspect d’un bouton html
Nous allons créer un composant graphique en javascript qui remplacera un bouton html.
Ce composant aura 3 images, pour chacun des 3 états (rollOver – rollOut et click) et devra récupérer l’action réalisé sur le click du bouton (l’appel de la fonction)
Le résultat est disponible ici.
Sommaire :
Bien démarrer Le code HTML Création de l’objet graphique CustumButton remplacer le bouton par une image : La méthode init() Implementation des événements mouseOver et MouseOut Implémentation de l’évènement au click Conclusion LiensBien démarrer
On va toujours se baser sur les fonctions du fichier events.js a savoir: La fonction getElementbyClassName, qui permet de cibler un élément a partir de sa classe La fonction addEvent qui permet de d’implémenter un gestionnaire d’événement La fonction addLoadEvent qui est l’équivalent d’un body.onload.Le code HTML :
Nous allons partir d’un code HTML très simple.- Un bouton de type button qui va nous servir de témoins
- un Bouton de type button de classe custumButton
- Un bouton de type submit de classe custumButton
- <input type="button" Value="mon bouton" onclick="alert('toto')"/>
- <input type="button" Class="custumButton" Value="mon bouton" onclick="alert('toto')" />
- <input type="submit" Class="custumButton" Value="mon bouton" />
Création de l’objet graphique CustumButton
Ici nous allons créer notre pseudo objet, a partir de sa classe, lui attacher les 3 images correspondant aux 3 états, puis lancer sa méthode init().- function Custum_Button(Classe,Img_MouseOut,Img_MouseOver,Img_onPress){
- //on récupere un tableau avec tous les éléments de classe Classe
- var Buttons = getElementsByClassName(Classe, "*", document)
- //on attribut les 3 paramètres d’image a une variable de notre objet
- this.Img_MouseOver = Img_MouseOver;
- this.Img_MouseOut = Img_MouseOut
- this.Img_onPress = Img_onPress
- for(var i=0; i<Buttons.length ; i++){
- this.monButton = Buttons[i];
- //on lance la function init
- this.init(this.monButton,this.Img_MouseOver);
- }
- }
remplacer le bouton par une image : La méthode init()
Ici, on va dans un premier temps replacer le button de class custumButton par un image- Custum_Button.prototype={
- //fonction qui se lance au lancement
- init : function(MonBouton,Img){
- //on créer un nœud DOM de type image
- var imgButton = document.createElement("img")
- //on lui attache les valeurs
- // ***balise alt = value du button
- // ***src = parametre 2 de la fonction constructeur
- imgButton.setAttribute("alt",MonBouton.value)
- imgButton.setAttribute("src",imgButton.Img_MouseOut)
- //on attache notre image sur la scene avant le bouton
- var Parent = MonBouton.parentNode
- Parent.insertBefore(imgButton,MonBouton)
- //on masque le input Button
- MonBouton.style.display = "none"
- }
- }
Implementation des événements mouseOver et MouseOut:
On va ensuite rajouter l’implémentation des états rollOver et rollOut, en s’appuyant sur la fonction Addevent du fichier DOMEvent.js :- Custum_Button.prototype={
- //fonction qui se lance au lancement
- init : function(MonBouton,Img){
- (…)
- addEvent(imgButton, "mouseover", this.set_onMouseOver,false)
- addEvent(imgButton, "mouseout", this.set_onMouseOut,false)
- } ,
- //action qui se lance au MouseOUt
- set_onMouseOut : function(){
- var theCaller=((this.style)?this:event.srcElement);
- theCaller.setAttribute("src",theCaller.Img_MouseOut)
- } ,
- //action sur le mouse over
- set_onMouseOver : function(){
- var theCaller=((this.style)?this:event.srcElement);
- theCaller.setAttribute("src",theCaller.Img_MouseOver)
- }
- }
Implémentation de l’évènement au click
La gestion du click est un peu différente du rollOver ou rollOut. En plus de changer l’image de notre composant graphique, il faut également effectué l’action associé au bouton html. Le bouton peut être de 2 types. Soit c’est un bouton de type « submit » et auquel cas l’action est de type form.submit Soit le bouton est de type « button » et auquel cas l’action est de type onclick="fonction()"- Custum_Button.prototype={
- //fonction qui se lance au lancement
- init : function(MonBouton,Img){
- (...)
- //si c'est un bouton submit
- if(MonBouton.getAttribute("type")=="submit"){
- //on recupere le nom du noeud parent qui contient
- //un attribut action ( donc un formulaire )
- while(MonBouton.parentNode.getAttribute("action")==null){
- MonBouton=MonBouton.parentNode
- }
- formTOsubmit=MonBouton.parentNode
- imgButton.formTOsubmit= formTOsubmit
- //on attache l'evenement
- this.addEvent(imgButton, "mousedown", this.set_onSubmit,false)
- }else
- //si c'est un bouton de type button
- if(MonBouton.getAttribute("type")=="button"){
- //on attache l'action au click du bouton sur le click du composant
- imgButton.onclick = MonBouton.onclick
- //on attache l'evenement
- this.addEvent(imgButton, "mousedown", this.set_onClick,false)
- }
- },
- //action sur le onclick pour les input button
- set_onClick : function(){
- var theCaller=((this.style)?this:event.srcElement);
- theCaller.setAttribute("src",theCaller.Img_onPress)
- } ,
- //action sur le onsubmit sur les submit type
- set_onSubmit : function(){
- var theCaller=((this.style)?this:event.srcElement);
- theCaller.setAttribute("src",theCaller.Img_onPress)
- this.formTOsubmit.submit();
- }
- }
Conclusion
A travers ces deux premiers tutoriaux, nous avons abordé les bases de la création de composants graphiques. Nous avons vu comment manipuler un élément html. Nous avons récupéré et modifier ses attributs, ajouté des comportement, et modifier son aspects graphique. Cela constitue la base des composants graphiques. L’utilisation de ces techniques permet de mettre en place des composants graphiques puissants, permettant de réduire les temps de productions en intégration. Dans le prochain tutorial nous élaborerons un composant graphique plus sophistiqué, à partir d’un élément de type select. Nous verrons également comment rendre le composant graphique autonome et indépendant et comment constituer nos classes de composants en librairies.Liens :
fichiers sources Tutorial 1 :Les composants graphiques :: étude de cas : le inputCommentaires
Bonjour,
je voulais juste savoir quand tu comptais lancer ta section site du jour? On attend toujours !
Le 29 juillet 2007 à 19:48, par Ganesha
Pas tout bien compris Mr Daweed, mais contente d’avoir découvert ton blog par Mr VD !
Le 29 juillet 2007 à 23:54, par monsieur.VD.
hihi, mais non c’est que c’est tout le jours daweed.info le site du jours ![]()
En tout cas bravo c’est chouette ton tuto !
Le 30 juillet 2007 à 8:20, par daweed
pour Ganesha:: alors en gros ce qu’il faut retenir c’est que je suis en train de bosser sur une librairie javascript pour faciliter la vie des intégrateurs…
Le 29 juillet 2007 à 18:37, par LC