IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Texte défilant horizontal saccadé


Sujet :

JavaScript

  1. #1
    Membre régulier Avatar de lesitadom39
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2015
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2015
    Messages : 112
    Points : 82
    Points
    82
    Par défaut Texte défilant horizontal saccadé
    Bonjour,
    pour une petite Mairie, il est nécessaire d'afficher un bandeau défilant affichant des événements ponctuels.
    Ça marche pas mal avec le code suivant:
    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
    47
    48
    49
    50
    51
    52
    53
    54
     
    #boxe_defil 
    { 
        position:relative; 
        width:auto;
        height:20px;
    	  font-family: 'alegreyablack_italic', serif;
        color:#FFF;
        font-weight:500; 
        overflow:hidden; 
    	text-shadow: 2px 2px #7b4760;	
    } 
    #defile 
    { 
        position:absolute; 
        margin-top:-1px; 
        background-color:transparent; 
    }
     
    </style>
    <?php
            include ("connecpdo.php") ;
                    $reponse = $connexion->query('SELECT defilement FROM defilehaut');
                    while ($donnees = $reponse->fetch())
                     {
                            $var = $donnees ['defilement'];
                     }
    ?>
    <script type="text/javascript">
    var defile;
    var psinit = 970; // position horizontale de depart
    var pscrnt = psinit;
    function texteDefile()
        {
            if (!defile) defile = document.getElementById('defile');
            if (defile)
                {
                    if(pscrnt < ( - defile.offsetWidth) )
                        {
                            pscrnt = psinit;
                        }
                    else
                        {
                            pscrnt+= -1; // pixel par deplacement
                        }
                    defile.style.left = pscrnt+"px";
                }
     
            }
    setInterval("texteDefile()",30); // delai de deplacement
    </script>
    <div id="boxe_defil">
    	<div id="defile"><?php echo "$var"; ?></div>
    </div>
    Mais ledéfilement est saccadé avec apparition brusque de chaque mot.
    Qui aurait une idée pour améliorer le code?
    Merci d'avance.

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 084
    Points : 7 995
    Points
    7 995
    Par défaut
    C'est possible, en fonction des contraintes, de se passer du JS. Du CSS3 et des animations transform et des transitions pourrait le faire...

  3. #3
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 749
    Points
    4 749
    Par défaut
    question basique avec dèjà 1001 réponses ur le net, dont au moins une ici : https://www.developpez.net/forums/d1...exte-saccades/

    Donc premier conseil, largement indiqué sur tout les forums du monde, faire une recherche avant pour s'assurer que personne n'a pas déjà posé la même question.

    Sinon, pour juste un regard sur ton code : utiliser un setInterval pour cette opération toujours un mouvement saccadé car intervalle de temps est approximatif et suivant la disponibilité de toute autre tache que gere ailleurs le navigateur: ce sont des navigateurs, pas des horloges de précision.

    Ton truc se règle uniquement en css => https://developer.mozilla.org/fr/doc...animations_CSS

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Voici des démos, full CSS (SANS JS), fonctionnelles (regarder le code source : "Ctrl"+"U") :

    Et ma version, full CSS (SANS JS), "améliorée" (avec possibilité de texte formaté HTML) :
    Dernière modification par Invité ; 24/02/2019 à 10h21.

  5. #5
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Citation Envoyé par lesitadom39 Voir le message
    [...] Mais ledéfilement est saccadé avec apparition brusque de chaque mot.
    Qui aurait une idée pour améliorer le code?
    Merci d'avance.


    Il faut donner une place suffisante au texte qui doit défiler :


    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
    window.addEventListener('load', ev => {
        // le DOM est construit et la page web est visible
     
        // début code du test
     
     
        let
            defile = document.querySelector('#defile'),
            psinit = 1000, // position horizontale de depart
            pscrnt = psinit;
     
        defile.style.border = '1pt solid red';
     
        // il faut imposer une taille sufisante pour contenir le texte
        //defile.style.width = '50%'; // ok
     
        defile.style.width = defile.textContent.length * 9 + 'px'; // ok dans mon test
     
        function texteDefile() {
            if (pscrnt < (-defile.offsetWidth)) {
                pscrnt = psinit;
            } else {
                pscrnt += -1; // pixel par deplacement
            }
     
            defile.style.left = pscrnt + "px";
        }
     
        setInterval(texteDefile, 30); // delai de deplacement
     
        // fin code du test
     
    }, {
        capture: false,
        passive: true,
        once: false
    });
    Je vous conseille de regarder et de tester les exemples donner dans les messages précédents.

  6. #6
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 102
    Points : 44 865
    Points
    44 865
    Par défaut
    Bonjour,
    dans cette discussion : Faire défiler un texte (fichier *.txt), on en était arrivé effectivement à cela : Texte défilant avec départ à droite.

  7. #7
    Invité
    Invité(e)
    Par défaut
    @NoSmoking

    J'ai constaté un "bug"...
    Si on veut "formater" le texte (exemple : ajouter des <b>...</b>), le texte se sépare en plusieurs morceaux, avec des vitesses différentes (!).

    C'est dû au :first-child.
    Qu'il suffit de remplacer par > :first-child, .msg ou juste > div * :
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .marquee-rtl > div { ... }
    .marquee-rtl:hover > div { ... }


    * Comme je l'a fait dans "ma" version (dérivée de la tienne) : https://codepen.io/jreaux62/pen/vzoJNN
    Dernière modification par Invité ; 25/02/2019 à 10h21.

  8. #8
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 102
    Points : 44 865
    Points
    44 865
    Par défaut
    J'ai constaté un "bug"...
    effectivement il y a un bug entre le fauteuil et le clavier

    Je n'ai pas mis la bonne/dernière version en ligne. Il manque bien le > avant :first-child ce qui fait que tous les 1st éléments se retrouvent avec un padding-left:100% et une animation personnelle.
    Je remplace par le bon fichier, merci pour ta vigilance.

Discussions similaires

  1. Texte défilant droite gauche qui ne saccade pas
    Par popovitch130 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/09/2011, 14h12
  2. Script de texte défilant horizontal
    Par laurentSc dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/12/2010, 00h06
  3. [FLASH MX2004] Texte défilant
    Par willowII dans le forum Flash
    Réponses: 9
    Dernier message: 08/10/2008, 15h19
  4. texte défilant horizontal
    Par paolo2002 dans le forum Flash
    Réponses: 2
    Dernier message: 17/06/2008, 17h47
  5. Réponses: 3
    Dernier message: 05/04/2005, 11h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo