Bonjour à tous,
je suis stagiaire dans une start-up et j'ai pour objectif actuel de faire un site vitrine. On m'a demandé de faire un texte qui se déroule petit à petit. Pas de problèmes jusque là, ça fonctionne. Néanmoins j'ai remarqué un bug, qui me semble logique étant donné que je n'en prends pas compte dans mon code. Lorsque je clique sur le bouton qui appelle la fonction JavaScript, le texte se déroule. Mais si j'appuie une seconde fois dessus pendant que le texte est en train de se dérouler, la page web se met à clignoter. J'utilise un timer, donc la fonction qui est rappelée ne doit pas comprendre si le texte est déroulé ou non, d'où le fait qu'elle bug.
J'ai essayé d'utiliser une variable globale afin de dire à la fonction si mon texte était en mode "déroulage" ou "remontage", mais cela n'a pas fonctionné. Voici mon code :
Concernant le code xHTML, il s'agit simplement d'un div contenant un id avec pour CSS un attribut display définit sur "none".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 <script type="text/javascript" language="javascript" > var finalHeight = 300; var actualHeight = 0; function Suite(myID) { var objet = document.getElementById(myID); //div i want to show if (objet.style.display == "none" || !objet.style.display) { objet.style.display = "block"; objet.style.overflow = "hidden"; var timer; var fct = function() { actualHeight += 5; //Increase the height to 5px every 40ms objet.style.height = actualHeight + 'px'; if (actualHeight > finalHeight) { clearInterval(timer); //objet.style.overflow = 'inherit'; finalHeight = 0; actualHeight = 300; } } fct(); timer = setInterval(fct, 40); //Every x ms } else if (objet.style.display == "block") { var timer; var fct = function() { actualHeight -= 5; //Increase the height to -5px every 40ms objet.style.height = actualHeight + 'px'; if (actualHeight == 0) { clearInterval(timer); //objet.style.overflow = 'inherit'; objet.style.display = "none"; finalHeight = 300; } }; fct(); timer = setInterval(fct, 40); //Every x ms } } </script>
Merci pour votre aide !
Partager