j'ai créé un script, il fonctionne très bien, mais il y a un problème que je n'arrive pas à résoudre. Normalement, il y a un évènement qui se déclenche lorsque la souris quitte une image (un fade sur un texte). Pour savoir que la souris n'est plus sur l'image, j'utilise onMouseOut. Cependant, lorsque qu'on déplace la souris vite, il n'y a pas d'évènement onMouseOut, par contre le onMouseOver est pris en compte.
Je voudrais savoir comment remédier à ce problème, merci d'avance
"If debbugging is the process of removing bugs, then programming must be the process of putting them in." (Edsger Dijkstra)
Excuse moi ! Je n'ai pas fait attention à ton problème que j'ai pris pour un autre .
Donc pour ton problème en fait ce que je te conseilles c'est de mettre ton setTimeout dans une variable, ainsi quand la souris sort de l'image tu mets cette variable à FALSE.
Le setTimeout sera annulé et ainsi la valeur de ton opacité ne sera pas surmodifiée .
J'avais déjà essayé, avec clearTimeout(), mais ça n'avais rien changer. Je pense que le problème vient du fait que les évènements ne sont pas gérés pendant l'exécution d'une fonction.
Enfin, je vais encore essayer avec clearTimeout()
"If debbugging is the process of removing bugs, then programming must be the process of putting them in." (Edsger Dijkstra)
Négatif, les évènements sont parfaitement exécutés pendant l'exécution d'une fonction, tu peux t'en convaincre en alongeant ton effet et ajoutant un onclick="alert('paf le chien');" par exemple .
clearTimeout() est plus propre, bien joué, je l'avais oublié lui .
Y'a un truc avec clearTimeout(), voici mon code (qui ne fait plus rien maintenant). Je crois que j'ai mal utilisé setTimeout() et clearTimeout() :
function fade(id, out)
{
if(out == 1) // Si out est à 1 c'est que l'on veut effacer instantanément
{
for(var i = 1; i <= 10; i++)
if(typeof(time_id[id][i]) != 'undefined')
clearTimeout(time_id[id][i]);
setOpacity('txt_'+id, 0);
setOpacity(id, 60);
}
else
{
for(var i = 1; i <= 5; i++)
{
var opacity_txt =i * 20;
var opacity = 60 + i * 8;
var time_id[id][i] = setTimeout('setOpacity("txt_'+id+'", '+opacity_txt+')', i*100);
var time_id[id][i+5] = setTimeout('setOpacity("'+id+'", '+opacity+')', i*100);
}
}
}
"If debbugging is the process of removing bugs, then programming must be the process of putting them in." (Edsger Dijkstra)
Ca ne marche pas, j'ai essayé avec static var, avec une variable globale, ça fait plus rien du coup.
Voici mon script actuel :
function fade(id, out)
{
for(var i = 1; i <= 5; i++)
{
if(out) // Si out est à 1 c'est que l'on veut effacer
{
var opacity_txt = 100 - i * 20;
var opacity = 100 - i * 8;
}
else
{
var opacity_txt = i * 20;
var opacity = 60 + i * 8;
}
setTimeout('setOpacity("txt_'+id+'", '+opacity_txt+')', i*100);
setTimeout('setOpacity("'+id+'", '+opacity+')', i*100);
}
}
Je reprend le code de ton post précédent en y ajoutant la modification sur les variables:
var opacity_txt, opacity, time_id = new Array()
function fade(id, out)
{
if(out == 1) // Si out est à 1 c'est que l'on veut effacer instantanément
{
for(var i = 1; i <= 10; i++)
if(typeof(time_id[id][i]) != 'undefined')
clearTimeout(time_id[id][i]);
setOpacity('txt_'+id, 0);
setOpacity(id, 60);
}
else
{
for(var i = 1; i <= 5; i++)
{
opacity_txt =i * 20;
opacity = 60 + i * 8;
time_id[id][i] = setTimeout('setOpacity("txt_'+id+'", '+opacity_txt+')', i*100);
time_id[id][i+5] = setTimeout('setOpacity("'+id+'", '+opacity+')', i*100);
}
}
}
Remarque: normalement pour un effet de ce genre tu n'as aucunement besoin d'un array (je pense à time_id) pour tes setTimeout, une variable suffit, une seule d'ailleurs car un seul setTimeout est nécessaire !
Pour moi ton script est à revoir...
Bien entendu n'hésite pas à me poser des questions, cependant malgré la simplicité de la chose ne compte pas sur moi pour faire ton travail .
Attention à la façon dont du t'exprime, j'ai compris que tu avais essayé en utilisant les mots clés "static" et "var" !
Pour faire ton script à priori il te faut deux fonctions, une qui lance l'autre en fait.
Une fonction qui gère l'opacité de ton élément (l'effet) et une autre fonction qui va servir à gérer cet effet (l'arrêter ou le lancer quoi).
Voici une base possible:
var time;
function setOpacity(element [, to]) { // Je rajoute "to", un attribut où on donnera l'opacité max, mais bon ce n'est pas du tout obligatoire
// Le code qui permet d'ajouter de l'opacité, attention à Internet Explorer qui a une façon particulière de la gérer .
// N'oublie pas non plus que javascript peut se révéler imprécis. L'idéal serait donc d'arrondir les valeurs ou au moins de régler la valeur à la fin
}
function switchOpacity(element) { // pareil évidemment on veut l'élément concerné, alors là c'est soit l'id soit l'élément direct, on s'en fou il le faut pour faire suivre à la fonction suivante !
// fonction qui gère en gros le ON ou OFF de l'opacité
}
Par contre si tu pouvais être un peu plus chaleureux dans tes messages... ça ne serait pas de refus, j'ai l'impression de te faire chier alors que je cherches à t'aider !
Désolé, je n'ai jamais été très doué pour expliquer Et désolé aussi de sembler désagréable, ce n'est pas du tout ma pensée.
Donc, pour la fonction setOpacity, elle fonctionne très bien, et comme c'est moi qui envoie l'opacité, je sais d'avance si il y a un risque d'imprécision. Dans mon cas, je ne pense pas qu'améliorer cette fonction soit nécessaire. Pour la transparence sur IE, j'y est pensé, et ça à l'air de fonctionner
Je vais donc essayer de rendre la fonction fade récursive, juste, je ne sais pas gérer le temps, à part setTimeout(), je ne connais pas d'autres fonctions (mis à part time(), mais je ne sais pas ce qu'elle renvoie : un timestamp ?) Je vais regarder sur internet
EDIT : Ne me demande pas comment j'ai fait, mais j'y suis arrivé. Voici mon code final :
Maintenant tout fonctionne nickel. Encore merci de ton aide
"If debbugging is the process of removing bugs, then programming must be the process of putting them in." (Edsger Dijkstra)
onMouseOut
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.