Javascript - Varier l'opacité d'un élément
Par Damien ALEXANDRE le vendredi, juin 30 2006, 00:30 - DevBlog - Lien permanent
Cet article s'appuie sur le script de brainerror.net, Cross-browser BlendTrans Filter JavaScript.
L'envie vous prend de rendre un des éléments de votre page transparent ? Vous avez une subite envie de faire un fondu sur une image ? Vous souhaitez pouvoir choisir l'opacité d'un élément ? Oui je sais, moi aussi.
Pour faire varier l'opacité en CSS, il existe 4 techniques, les 4 ne fonctionnent pas partout, il faut donc jongler avec en attendant que les navigateurs respectent tous les même normes.
opacity: 0.5;
Le technique officielle du W3C, elle ne fonctionne que sous Mozilla Firefox.
-moz-opacity: 0.5;
Celle ci fonctionne sur les anciennes versions de Mozilla et Phoenix/FireBird/FireFox.
-khtml-opacity: 0.5;
Celle ci est la méthode des navigateur utilisant le moteur KHTML (Konquerer sous Linux et Safari sur MacOS).
filter: alpha(opacity=50);
Et pour finir, la méthode a utiliser sur MSIE (elle ne marche QUE chez lui).
On va donc créer une fonction qui modifiera ces 4 paramètres, cela nous garantira un fonctionnement sur tous les navigateurs graphique de moins de 7 ans LOL
Ce qu'on veut c'est faire un fondu, il faut donc aussi définir le temps de fusion.
On va juste faire un appel à une fonction du style
opacity('IDdiv', 100, 0, 500) ou :
IDdiv = l'attribut ID de l'élément à modifier,
100 = l'opacité de dépars (0-100),
0 = l'opacité d'arrivée (0-100),
500 = Temps du fondu en millisecondes, 500 correspond à 0.5 seconde.
Maintenant une fonction qui sait changer l'opacité chez tous le monde :
function changeOpac(opacity, id) { var object = document.getElementById(id).style; object.opacity = (opacity / 100); object.MozOpacity = (opacity / 100); object.KhtmlOpacity = (opacity / 100); object.filter = "alpha(opacity=" + opacity + ")"; }
C'est super simple, on lui donne une opacité et un ID, et elle le transmet en CSS à l'élément. La gros du boulot, c'est de créer les appels à cette fonction, il faut lancer une boucle !
function opacity(id, opacStart, opacEnd, millisec) { //speed for each frame var speed = Math.round(millisec / 100); var timer = 0;
Ici on initialise nos valeurs, pour 500 millisecondes, on aura un coefficient de vitesse de 5, qui sera multiplié par le temps (qui varie donc).
if(opacStart > opacEnd) { for(i = opacStart; i >= opacEnd; i--) { setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed)); timer++; } } else if(opacStart < opacEnd) { for(i = opacStart; i <= opacEnd; i++) { setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed)); timer++; } }
Voici enfin la boucle finale, on détermine le sens de variation du fondu (disparition ou apparition ?), et on lance une boucle for.
Celle ci utilise la fonction native setTimeout pour lancer un appel à notre fonction changeOpac() en variant l'opacité à chaque boucle, et ce de plus en plus lentement.
Il n'y a pas grand chose d'autre à expliquer, comme je suis sympathique je vous offre un exemple ici,
pour télécharger le code source et voir d'autres exemple de fonctionnement de ce script, je vous renvoie vers le site de l'auteur originel, en Anglais.
Je suis très content d'avoir trouvé ce script, je voulais vous le faire partager car les exemple de fondu en Français sont trop rare a mon goût, et faut avouer que ça rox quand même ! ![]()
/
Commentaires
vraiment trés interessant , ca me donne des idées pour mon prochain thème
merci, c'est trop ça que je cherchais !

pour ma part, je l'ai adapté à un menu, pour un effet sur des menus déroulants. Ca claque ! Flash en est vert de rage !
Un exemple dès que j'ai un blog
le code m'a l'air très cool! mais je sais malheureusement pas comment l'intégrer à ma page.
Très bon ce script, à mettre entre toutes les mains !!!
Merci ! Un grand merci pour cette traduction / simplification des explications du script. J'avais trouvé la page dont tu t'es inspiré mais par manque de connaissances en javascript j'ai eu du mal.
Tu m'as fait gagner un temps précieux.
En plus bravo à MDZ pour le design, il est vraiment très sympa !
Super Merci Beaucoup !
Pour ce qui n'ont pas bien compris, regardez le code source de la page exemple :
http://mobman02.free.fr/nepassuppri...
Et vous comprendrez le fonctionnement !
Merci pour ce script !!!
I can’t believe that Ubiquity http://www.frogmix.com/search/Ubiqu... wasn’t mentioned, this add-on will really change the way you use Firefox
Extra ! Après de multiples, ton script est le meilleur : simple et efficace : BRAVO !
sympa ton script, facile a comprendre, claire et direct,
Ca fait plaisir de trouver sa réponse du 1er coup.
Rien a dire, niquel continue comme ca.