Problème en HTML

Résolu
gagner79 Messages postés 261 Date d'inscription   Statut Membre Dernière intervention   -  
Groarh Messages postés 682 Date d'inscription   Statut Membre Dernière intervention   - 27 oct. 2008 à 23:10
Salut !

J'ai créé un forum, et en haut de la page il y a un message de bienvenue qui bouge de droite à gauche et le défilement s'arrete quand je clique dessus, voici la ligne de code :

<marquee behavior="scroll" direction="{WDIR}" scrollamount="{WAMOUNT}" scrolldelay="{WSPEED}" height="{WHEIGHT}" style="height:{WHEIGHT}px" onclick="this.stop()" onclick="this.start()">

où "this.stop()" sert à arrêter le défilement et "this.start()" sert à le démarrer.
Comment doij-je faire pour que le défilement s'arrête quand je clique dessus et démarre quand je clique dessus ?

Merci d'avance !
A voir également:

7 réponses

stephane_mc2004 Messages postés 755 Date d'inscription   Statut Membre Dernière intervention   96
 
this.stop() et this.start ne sont pas definis dans ton code !!!

voici un exemple simple

<script type="text/javascript">
/* On définit les fonctions de d'arret et de comencement */

function stop() {
// On remet à zéro toutes les valeurs possibles de defilement

document.getElementById('texte').scrollamount= 0 ; 
document.getElementById('texte').scrolldelay = 0 ; 

}

function start() {
// On remet en marche le  defilement. Ici je choisis 6 partout mais tu mets ce que tu veux hein lol

document.getElementById('texte').scrollamount= 6 ; 
document.getElementById('texte').scrolldelay = 6 ; 

}

function si() {

      if (start()) { 
          stop() ;
      }
      else {
          start() ; 
      }
}
</script>



<marquee id = "texte" behavior="scroll" scrollamount=6 scrolldelay=6 onclick="si();"> Salut </marquee>


et si sa marche pas fais ceci :

<script type="text/javascript">
/* On définit les fonctions de d'arret et de comencement */

function stop() {
// On remet à zéro toutes les valeurs possibles de defilement

document.getElementById('texte').scrollamount= 0 ; 
document.getElementById('texte').scrolldelay = 0 ; 

}

function start() {
// On remet en marche le  defilement. Ici je choisis 6 partout mais tu mets ce que tu veux hein lol

document.getElementById('texte').scrollamount= 6 ; 
document.getElementById('texte').scrolldelay = 6 ; 

}

</script>



<marquee id = "texte" behavior="scroll" scrollamount=6 scrolldelay=6 onmouseover="stop()" onmouseout="start()"> Salut </marquee>

1
Groarh Messages postés 682 Date d'inscription   Statut Membre Dernière intervention   185
 
Salut !
Je connais bien ton problème, pour m'être cassé les dents dessus pas mal de fois :D
Le truc c'est que tu ne peux pas assigner plusieurs fonctions au même évènement, par exemple ici : this.stop() et this.start() à onClick. Il faut modifier un peu le Javascript, en créant une nouvelle fonction qui servira à basculer l'état (défilant ou arrêté) du marquee. J'appellerai cette fonction toggle() car toggle signifie basculer en anglais.
<marquee behavior="scroll" direction="{WDIR}" scrollamount="{WAMOUNT}" scrolldelay="{WSPEED}" height="{WHEIGHT}" style="height:{WHEIGHT}px" onclick="toggle(this)">

NB : je ne mets pas this.toggle() car il faudrait alors rajouter une méthode toggle aux objets de type marquee. C'est faisable mais un peu compliqué (Si tu veux, tu me demandes ;) ).

Nous allons simplement rajouter une fonction toggle au script général :
function toggle(objet) {
  if (objet.etat == 'arrete') {
    objet.etat = 'defilant';
    objet.start();
  } else {
    objet.etat = 'arrete';
    objet.stop();
  }
}

Explication : lors du chargement de la page, le marquee est créé et se met en mode défilant (enfin, je crois ^^)

Lorsqu'on clique dessus pour la 1re fois, la fonction toggle est appellée avec this é en paramètre. Elle cherche alors une propriété this.etat qui n'existe pas encore, et qui n'est donc pas égal à 'arrete'.

On e donc dans le bloc else.

Là, on donne la valeur 'arrete' à this.etat et on arrête le marquee avec this.stop().

Lors du second clic, le test if va voir que this.etat contient la valeur 'arrete', on e dans le bloc if qui donne alors la valeur 'defilant' à this.etat et qui fait this.start().

Lors du 3e clic, on refait this.stop() et on remet la valeur 'arrete', la boucle est bouclée.


Voilà ça marche, j'ai testé sous FF3. Si tu as des questions, je suis là ;)
1
bernoussi Messages postés 1 Date d'inscription   Statut Membre Dernière intervention  
 
c koi le blem
0
gagner79 Messages postés 261 Date d'inscription   Statut Membre Dernière intervention   40
 
j'ai essayé mais ça ne le fait pas quand on clique ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
gagner79 Messages postés 261 Date d'inscription   Statut Membre Dernière intervention   40
 
Merci !!!!!! Je te remercie autant de fois que tu veux !!!
0
stephane_mc2004 Messages postés 755 Date d'inscription   Statut Membre Dernière intervention   96
 
alors tu peux metre le statut de ce post comme resolu
0
Groarh Messages postés 682 Date d'inscription   Statut Membre Dernière intervention   185
 
Bon j'avais envie de le faire quand même :P alors voilà : comment rajouter la méthode toggle à toutes les balises marquee.

La difficulté, c'est que cette balise est dépréciée par le W3C, étant donnée qu'elle est propriété de Microsoft. Même si les navigateurs "indulgents" comme FF la traitent correctement, elle ne doit pas exister et n'a donc pas de modèle objet (équivalent DOM) pour le javascript... résultat : pas de prototype, ces références aux objets si pratiques en javascript T_T

Qu'à cela ne tienne, on va le faire à la main !
var collec = document.getElementsByTagName('marquee');
for (var i = 0; i <= collec.length - 1; i++) {
  collec.isScrolling = true;
  collec.item(i).toggle = function() {
    if (this.isScrolling) {
      this.stop();
    } else {
      this.start();
    }
    this.isScrolling = !this.isScrolling;
  }
}
Ce code doit être exécuté au chargement de la page, après que le contenu ait été créé. Utilisez votre méthode habituelle ou pas...
0