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 :

Concevoir des sliders perso


Sujet :

JavaScript

  1. #41
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    je vais tester tout ca beguinner
    mais nosmoking avec son model m'a un peu eclairé
    et non pour le moment on ne peut pas incriminer une eventuelle selection de texte car je ne l'ai pas intégré encore dans le wysiwyg il n'y a que les curseurs

    le mouseleave regle tout les probleme visiblement et vu la difference entre out et leave j'en conclu effectivement que les evenement du curseur soit amalgamé avec les evenement du fond du curseur

    je met le mien au propre et en dur une fois cela fait je le rendrait dynamique (c'est a dire tout construire dynamiquement y compris le div qui contiendra ce menu )
    je reviens toute a l'heure
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  2. #42
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 913
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 913
    Par défaut
    Tu as testé le code, il fonctionne sur IE ou pas ?

    Sinon dans ta nouvelle solution est-ce que tu évite l'apparition de l'image "panneau sens interdit" qui arrive parfois quand le navigateur croit que tu veux faire un glisser/déposer ?

    Oui car autrement tu auras toujours le problème et si ce problème n'en n'est plus un eh ben ça veut dire que le code que j'avais posté il y un bon moment fonctionne depuis le début...

  3. #43
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 913
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 913
    Par défaut
    Salut,

    J'ai testé le code NoSmoking, ça m'a pris du temps car je cherchais à comprendre pourquoi avec son code l'image "panneau sens interdit" (qui arrive parfois quand le navigateur croit qu'on veut faire un glisser/déposer) n’apparaît pas...

    J'ai enlevé le code qui annule la sélection et là effectivement l'image apparaît parfois... J'ai ajouté cela à mon code mais ça ne fonctionnait pas, j'ai perdu du temps à cause de ça avant de comprendre qu'il fallait évidement que j’enlève le draggable="true" que j'avais mis pour empêcher l'image "panneau sens interdit" d’apparaître...

    C'est donc une solution qui je pense est meilleure que celle que j'avais trouvée... Vous auriez pu le dire plus tôt quand même... Non je plaisante...

    Sinon le code de NoSmoking me parait meilleur car le curseur se déplace même lorsqu'on clique sur la barre*** et j'ai l'impression que c'est plus fluide je pense parce que ça fait moins d’apparition/disparition du curseur (avec le déplacement quand on clique sur la barre*** on passe directement d'une position A à une position B mais avec le onmoussmove on peut passer par plusieurs positions intermédiaire)...

    Bon après on peut ne pas vouloir cette fonctionnalité...

    *** Je dis "barre" mais ce n'est pas tout à fait exacte en fait c'est plutôt la div.slider mais je pense que c'est facile à changer si besoin est...

    Citation Envoyé par Beginner. Voir le message
    Oui car autrement tu auras toujours le problème et si ce problème n'en n'est plus un eh ben ça veut dire que le code que j'avais posté il y un bon moment fonctionne depuis le début...
    Bon ben ça confirme que mon code fonctionne sans bugger dés qu'on supprime l'apparition de l'image "panneau sens interdit"...

  4. #44
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    beguinner ton dernier jsbin fonctionne mais tu ne semble pas avoir compris que je ne veux pas qu'il soit basé sur le move /up du document
    dans ton dernier essaie meme en dehors du conteneur une fois le curseur pointé avec le down tant que tu relache pas il bouge meme si tu n'est plus dedans
    je voulais une flexibilité ok mais quand meme la dans mon wysiwyg juste enn dessous de ce trait bleu il y a d'autre element qui sont sensés etre drager aussi et de maniere différentes
    tu vois le topo
    Nom : demo2.gif
Affichages : 291
Taille : 309,5 Ko

    le probleme que j'avais avec ca c'est bien le mouseout car en restant appuyé on a le focus sur le curseurs et donc les evenements autre que le sien(donc du conteneur) sont bloqués ou perturbé par la propagation ca reste a determiner

    le mouseleave englobant le curseur, le probleme est réglé
    engros c'est comme si je faisait
    conteneur onmouseout>>>>> au revoir
    curseur onmouseout>>>>> au revoir
    en meme temps

    c'est pour cela d'ailleur que mon drag and drop perso ne fonctionnait pas avec mouse down/move/up mais que avec draggstart /ondrag,dragend oui la gestion des evenements n'est pas pareille
    dragstart ne se produit qu'une fois on drag ne seproduit que quand on drague ce qui englobe forcement un mousedown
    c'est la dessus qu'il faut potasser
    identifier exactement ce que font ces evenements de facon syncrone ou asyncrone

    mauvaise nouvelle pour moi "classList est incompatible avec( L' OCX "webbrowser" de VBA excel) je ne l'utiliserais donc pas dans mon code

    laisse moi terminer ca et je reviens
    j'avance pas aussi vite que vous
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #45
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 913
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 913
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    beguinner ton dernier jsbin fonctionne mais tu ne semble pas avoir compris que je ne veux pas qu'il soit basé sur le move /up du document
    Ah ben je t'ai répondu plusieurs fois à ça mais ça ne veut pas rentrer apparement... Peut-être que ça rentrera à tête reposée...


    Citation Envoyé par patricktoulon Voir le message
    je voulais une flexibilité ok mais quand meme la dans mon wysiwyg juste enn dessous de ce trait bleu il y a d'autre element qui sont sensés etre drager aussi et de maniere différentes
    tu vois le topo
    Oui mais ce n'est pas un problème car pour que le curseur continue de bouger il faut rester appuyé sur la souris dés que tu relâches tu récupères la main pour les autres éléments...

    Citation Envoyé par patricktoulon Voir le message
    dans ton dernier essaie meme en dehors du conteneur une fois le curseur pointé avec le down tant que tu relache pas il bouge meme si tu n'est plus dedans
    Ben oui c'est fait exprès car qui peut le plus peut le moins, c'est-à-dire que tu peut limiter ça si tu le souhaites il y a plusieurs moyens :

    - par calcul dés que les coordonnées dépassent les limites souhaitées tu fais curseur.isMousseDown = false;...

    - Utiliser le conteneur div#slider que j'avais déjà mis et alors lui ajouter un onmouseleave avec dedans curseur.isMousseDown = false;...

    - Ou carrément en plus du deuxième point remplacer document qui te gène par le conteneur div#slider...

    Voici le code pour ce troisième point :

    Code javascript : 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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    var barre = document.getElementsByClassName("barre")[0];
    var curseur = document.getElementsByClassName("curseur")[0];
    curseur.isMousseDown = false;
    curseur.positionX = curseur.offsetLeft;
    curseur.positionXMax = barre.clientWidth - curseur.offsetWidth;
    // position de la paddingBox de la barre (il faut ajouter la bordure gauche) :
    barre.positionX = barre.getBoundingClientRect().left +
        parseInt(getComputedStyle(barre, null).getPropertyValue('border-left-width'), 10);
     
    var msg0 = document.getElementById("msg0");
    var msg1 = document.getElementById("msg1");
    var msg3 = document.getElementById("msg2");
     
     
    curseur.onmousedown = function (event) {
        //event.preventDefault();
        curseur.isMousseDown = true;
        var oSel = window.getSelection();
        oSel.removeAllRanges();
     
        // affichage...     
        console.log("onmousedown: " + "curseur.isMousseDown: " + curseur.isMousseDown);
        msg0.innerHTML = "onmousedown: ";
        msg1.innerHTML = "curseur.isMousseDown: " + curseur.isMousseDown;
        msg2.innerHTML = "curseur.position: " + curseur.positionX + " | " + curseur.offsetTop;
    };
    slider.onmousemove = function (event) {
     
        // affichage...
        var str = "clientX : " + event.clientX + " clientY : " + event.clientY +
            " offsetX : " + event.offsetX + " offsetY : " + event.offsetY;
        //console.log("onmousemove", str);
        msg0.innerHTML = "onmousemove --> " + str;
        msg1.innerHTML = "curseur.isMousseDown: " + curseur.isMousseDown;
        msg2.innerHTML = "curseur.position: " + curseur.positionX + " | " + curseur.offsetTop;
        //---------------------------------------
        //event.preventDefault();
        if (curseur.isMousseDown) {
     
            var newPosition = event.clientX - barre.positionX;
            if (newPosition > curseur.positionXMax) newPosition = curseur.positionXMax;
            if (newPosition < 0) newPosition = 0;
     
            curseur.style.left = newPosition + "px";
            curseur.positionX = curseur.offsetLeft;
        }
    };
    slider.onmouseup = function (event) {
        //event.preventDefault();
        curseur.isMousseDown = false;
        // affichage...     
        console.log("slider onmouseup: " + "curseur.isMousseDown: " + curseur.isMousseDown);
        msg0.innerHTML = "onmouseup: ";
        msg1.innerHTML = "curseur.isMousseDown: " + curseur.isMousseDown;
        msg2.innerHTML = "curseur.position: " + curseur.positionX + " | " + curseur.offsetTop;
    };
     
    slider.onmouseleave = function (event) {
        //event.preventDefault();
        curseur.isMousseDown = false;
        // affichage...     
        console.log("slider onmouseleave : " + "curseur.isMousseDown: " + curseur.isMousseDown);
        msg0.innerHTML = "onmouseleave: ";
        msg1.innerHTML = "curseur.isMousseDown: " + curseur.isMousseDown;
        msg2.innerHTML = "curseur.position: " + curseur.positionX + " | " + curseur.offsetTop;
    };

    Code html : 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
    <!DOCTYPE html>
    <html>
     
    <head>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
        <meta charset="utf-8">
        <title>Sliders</title>
        <link rel="stylesheet" href="style.css">
    </head>
     
    <body>
     
     
        <div id="slider">
            <div class="barre">
                <div class="curseur"></div>  
                <!-- draggable="true" -->
            </div>
        </div>
     
        <p id="msg0">... </p>
        <p id="msg1">... </p>
        <p id="msg2">... </p>
     
        <script src="slider.3.js"></script>
    </body>
     
    </html>

    Si tu enlèves le code d'affichage tu verras que ce code n'est pas très long...

  6. #46
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 913
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 913
    Par défaut
    Citation Envoyé par Beginner. Voir le message

    Si tu enlèves le code d'affichage tu verras que ce code n'est pas très long...
    Ceci dit je préfère le code de NoSmoking pour plusieurs raisons, je te le conseille d'ailleurs...

  7. #47
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    oui il fonctionne a la perfection mais je ne comprends pas tout
    en plus classlist ne fonctionnera pas sur mon support " fonction non reconnue"

    j'essai d'ameliorer le mien depuis tout a l'heure et je plante sur un truc absolument ilogique

    au down la variable globale"curseur" devient le curseur sur le quel j'appuie je luis change la classe de style pour un effet visuelle
    dans le move tout se passe bien je positionne "curseur" (qui est le curseur actuellement dragué) tout va bien plus de probleme dedans ou dehors
    et des que je relache curseur est indefini alors qu'a aucun moment dans le dwn ou move il devient null
    ca fait plus d'une heure que je bataille avec

    sans parler des "!=" ou "!==" qui ne donne pas le meme résultat
    j'ai mis des console.log et c'est bon dans la console il est bien identifié
    j'y comprends plus rien ,je reprendrais ca demain ca m'a un peu soulé en fait, je vais aller me detendre en VBA
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  8. #48
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 913
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 913
    Par défaut
    Ben mon code n'utilise pas classList et même c'est je pense faisable d'ajouter cette fonctionnalité...

    Sinon pour ton problème de variable difficile de savoir sans le code mais c'est peut-être lié à ta question sur l'autre fil sur les variables globales...

    Pour limiter les variables globales (ce qui est conseillé apparemment) tu peux faire par exemple comme j'ai fait :

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var curseur = document.getElementsByClassName("curseur")[0];
    curseur.isMousseDown = false;
    curseur.positionX = curseur.offsetLeft;
    curseur.positionXMax = barre.clientWidth - curseur.offsetWidth;

    Tu vois curseur est un élément html mais on peut lui ajouter des propriétés, ce que font les trois dernière ligne (elles ajoutent les propriétés isMousseDown, positionX et positionXMax)...

    Chaque slider peut avoir les siennes.

  9. #49
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    oui sauf que au final j'en aurais 5 dans un menu
    2 dans un autre et encore 3 dans un autre et cela avec les meme fonctions ,sinon c'est pas la peine de faire du dynamique autant le faire en dur
    si j'arrivais a faire fonctionner au moins celui qui en aura 5 je saurais ravi

    je masacre mon code depuis tout a l'heure je suis perdu et tellement enervé avec ce truc que je vois plus clair
    il y a tellement d'ilogisme dans ce truc
    du genre par erreur j'ai ecrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    curseur1.addEventListener("mousedown", dragStart, false);
     curseur2.addEventListener("mousedown", dragStart, false);
     curseur3.addEventListener("mousedown", dragStart, false);
     curseur4.addEventListener("mousedown", dragStart, false);
    sauf que curseur1,2,3,4 son les id et non des variable pourtant il fonctionne
    je reproduit la meme erreur avec les fond des curseur par curiosité et ben ca ne fonctionne pas
    ca ne fonctionne que comme ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    document.getElementById("fond1").addEventListener("mousemove", dragging, false);
     document.getElementById("fond3").addEventListener("mousemove", dragging, false);
     document.getElementById("fond2").addEventListener("mousemove", dragging, false);
     document.getElementById("fond4").addEventListener("mousemove", dragging, false);
    voila le genre de question au quel je fait face pourquoi l'un et pas l'autre ca s'invente pas quand meme

    une variable globale"curseur" qui disparait je ne sais ou en un cliquement d'oeuil

    bref je l'ai tellment masacré que je sais plus par ou le prendre
    dans l'etat
    Code html : 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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
     
    <!doctype html>
    <html lang="fr">
    <head>
     <!--meta charset="utf-8"-->
      <title>TEST SLIDE</title>
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
    <style>
    .fondd {
     border:1px solid green;
    background: linear-gradient(to bottom, rgba(220,220,220, 0) 44%, rgba(255, 255, 255, 0) 44%, rgba(33, 180, 226, 1) 53%, rgba(220,220,220, 0) 63%);
    margin-top:3px;
    user-select: none;
    }
    .cur {
     background: linear-gradient(to bottom, rgba(220, 227, 145, 0.1) 0%, rgba(97, 196, 25, 1) 50%, rgba(180, 227, 145, 1) 100%);
    user-select: none;
    }
    .cur2{
    background: linear-gradient(to bottom, rgba(240, 240, 0, 1) 0%, rgba(255, 50,0,1) 50%, rgba(240, 240, 0, 1) 100%);
    }
    </style>
     
    <script  type= "text/javascript">
    var largeur;
    var sl;
    var curseur;
    var oldX;
    var newX;
    var moinsX;
    var divi;
    function dragStart(event) {
     console.log(event.target.id);
     if(curseur===null){
      curseur = event.target;///curseur c'est bien toi t'es la??
     
     curseur.className=("cur2");// il aura plus de classe comme ca:):) 
             var dragg = curseur.parentElement;
     largeur = curseur.parentElement.offsetWidth - (curseur.offsetWidth/2 );
     divi = (largeur-(curseur.offsetWidth/2 )) / 100 ;
     oldX = event.clientX + (document.documentElement.scrollLeft + document.body.scrollLeft);
     moinsX = oldX - curseur.offsetLeft;
           } 
    }
    function dragging(event) {
     if (curseur!=null) {
      newX = event.clientX + (document.documentElement.scrollLeft + document.body.scrollLeft);
      console.log("deplacement " + newX);
      var posX = newX - moinsX;
      if (posX < 0) {
       posX = 0;
       //return false
      }
      if (posX >  largeur - (curseur.offsetWidth / 2)) {
       posX =  largeur - (curseur.offsetWidth / 2);
      }
      curseur.style.position = "absolute";
      curseur.style.left = posX + "px";
      document.getElementById("res").innerHTML =curseur.id+" : " + Math.round(curseur.offsetLeft / divi);
     }
    }
    function relache(event) {
    console.log(" par event "+ event.target.id);//voir dans la console si il est bien identifié  
    console.log("par la variable curseur "+ curseur.id);//voir dans la console si il est bien identifié  
    console.log(" mais ou qu'il est donc parti celui la ");
    //////event.target.childNodes[0].className=("cur");//marche pas
          curseur.className="cur";//beep beep circulez  y a rien a voir   
          curseur = null;// beep beep ca change pas grand chose on sait pas qui c'est ce satané curseur
     
    }
    function ajoute() {
     curseur1.addEventListener("mousedown", dragStart, false);//heu.. curseur1 qui??? vous avez dit ???
     curseur2.addEventListener("mousedown", dragStart, false);//idem
     curseur3.addEventListener("mousedown", dragStart, false);//idem
     curseur4.addEventListener("mousedown", dragStart, false);//idem
     
            document.getElementById("fond1").addEventListener("mousemove", dragging, false);
     document.getElementById("fond3").addEventListener("mousemove", dragging, false);
     document.getElementById("fond2").addEventListener("mousemove", dragging, false);
     document.getElementById("fond4").addEventListener("mousemove", dragging, false);
     
            document.getElementById("fond1").addEventListener("mouseup", relache, false);
     document.getElementById("fond2").addEventListener("mouseup", relache, false);
     document.getElementById("fond3").addEventListener("mouseup", relache, false);
     document.getElementById("fond4").addEventListener("mouseup", relache, false);
     
            document.getElementById("fond1").addEventListener("mouseleave", relache, false);
            document.getElementById("fond2").addEventListener("mouseleave", relache, false);
            document.getElementById("fond3").addEventListener("mouseleave", relache, false);
            document.getElementById("fond4").addEventListener("mouseleave", relache, false);
    }
    </script>
    </head>
    <body>
       <div id="conteneur1" style="position:absolute;height:200px;left:28px;width:350px;border:2 solid red;">
          un slide pas comme les autre 
          <p id ="res">position</p>
          <br/><br/>
     
          <div id="fond1" class="fondd" style="position:relative;width:200px;height:26px;overflow:none;">
             <div id="curseur1" class="cur" style="position:absolute;top:5px;width:16px;height:16px;border-radius:8px;" unselectable="on"></div>
          </div>
     
          <div id="fond2"  class="fondd" style="position:relative;width:300px;height:26px;overflow:none;" >
             <div id="curseur2" class="cur" style="position:absolute;top:5px;width:26px;height:16px;border-radius:8px;" unselectable="on"></div>
          </div>
     
          <div id="fond3"  class="fondd" style="position:relative;width:300px;height:26px;overflow:none;">
             <div id="curseur3" class="cur" style="position:absolute;top:5px;width:10px;height:16px;border-radius:8px;" unselectable="on"></div>
          </div>
          <div id="fond4"  class="fondd" style="position:relative;width:110px;height:26px;overflow:none;">
             <div id="curseur4" class="cur" style="position:absolute;top:5px;width:16px;height:16px;border-radius:8px;" unselectable="on"></div>
          </div>
     
    </div>
       <script>ajoute();</script>
    </body>
     
    </html>
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  10. #50
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 913
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 913
    Par défaut
    @NoSmoking :

    Je vois que tu as géré les dépasssements d'une manière originale (sans utiliser de conditions) :

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    // gestion dépassements
                pc = Math.max(pc, 0);
                pc = Math.min(pc, 100);

    Je me demandais quand même si cela ne serait pas plus polyvalent en inversant l'ordre des deux instructions, oui car autrement si par exemple pc était négatif cela ne fonctionnerait pas il me semble (c'est-à-dire que pc ne serait pas ramené à 0), non ?

    Bon c'est pour s'instruire car je me doute que dans ce cas pc ne devrait pas être négatif mais il ne devrait pas non plus être supérieur à 100 et comme tu as traité ce cas je me dis autant aussi traité l'autre...

    Qu'en penses-tu ?

  11. #51
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 913
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 913
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    re
    oui sauf que au final j'en aurais 5 dans un menu
    2 dans un autre et encore 3 dans un autre et cela avec les meme fonctions ,sinon c'est pas la peine de faire du dynamique autant le faire en dur
    si j'arrivais a faire fonctionner au moins celui qui en aura 5 je saurais ravi
    Ben avec le code de NoSmoking c'est simple à faire, c'est optimisé, tu peux en mettre autant que tu veux sans avoir à répéter tous ces addEventListener comme tu le fait car lui utilise une boucle, tu as seulement à ajouter une div avec la class slider dans le html et le code fait tout le reste...

    Ca c'est bien du dynamique comme tu le souhaites, non ?


    Citation Envoyé par patricktoulon Voir le message
    re
    oui sauf que au final j'en aurais 5 dans un menu
    2 dans un autre et encore 3 dans un autre et cela avec les meme fonctions ,sinon c'est pas la peine de faire du dynamique autant le faire en dur
    si j'arrivais a faire fonctionner au moins celui qui en aura 5 je saurais ravi

    je masacre mon code depuis tout a l'heure je suis perdu et tellement enervé avec ce truc que je vois plus clair
    il y a tellement d'ilogisme dans ce truc
    du genre par erreur j'ai ecrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    curseur1.addEventListener("mousedown", dragStart, false);
     curseur2.addEventListener("mousedown", dragStart, false);
     curseur3.addEventListener("mousedown", dragStart, false);
     curseur4.addEventListener("mousedown", dragStart, false);
    sauf que curseur1,2,3,4 son les id et non des variable pourtant il fonctionne
    Oui je l'avais remarqué et c'est connu apparemment, tu peux utiliser directement le id (curseurX) comme si tu avais mis avant ceci : var curseurX = document.getElementById("curseurX");

  12. #52
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    il me semble que le traitent 0 ou 100 y est je l'ai pas enlevé ???
    pour delirer tellement ca m'enerve ce truc j'ai mis en fin de fonction ajoute
    et ben ca regle tout les problemes bien que curseur1 n'est toujours pas une variable ou une non déclarée mais bon ca marche quand meme va savoir

    le reglage des 0 et 100 n'est pas original il est fait automatiquement en fonction de la largeur du fond et de la largeur du curseur
    demonstraction avec curseur et largeur de fond différentes
    Nom : demo2.gif
Affichages : 275
Taille : 227,7 Ko
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  13. #53
    Membre extrêmement actif Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 532
    Par défaut
    Citation Envoyé par Beginner. Voir le message
    @NoSmoking :

    Je vois que tu as géré les dépassements d'une manière originale (sans utiliser de conditions) :

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    // gestion dépassements
                pc = Math.max(pc, 0);
                pc = Math.min(pc, 100);

    Je me demandais quand même si cela ne serait pas plus polyvalent en inversant l'ordre des deux instructions, oui car autrement si par exemple pc était négatif cela ne fonctionnerait pas il me semble (c'est-à-dire que pc ne serait pas ramené à 0), non ?

    Bon c'est pour s'instruire car je me doute que dans ce cas pc ne devrait pas être négatif mais il ne devrait pas non plus être supérieur à 100 et comme tu as traité ce cas je me dis autant aussi traité l'autre...

    Qu'en penses-tu ?
    ben non le max entre -25 et 0 ce sera toujours zéro... les chiffres négatifs sont tous inférieurs à zéro...

    Sinon c'est aussi la méthode que j'ai utilisé dans un post qui précede celui de @NoSmoking,, si ça ce peut il à pompé l'idée chez moi

  14. #54
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re non psychadelic
    j'ai pompé sur personne

    je procède comme en vb si<0 alors 0 si >100 alors 100

    re j'ai remplacer toute les lignes addeventlistener par ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function ajoute() {
     var messlides = document.getElementsByClassName("fondd");
     for (var i = 0; i < messlides.length; i++) {
      messlides[i].addEventListener("mousemove", dragging, false);
      messlides[i].addEventListener("mouseup", relache, false);
      messlides[i].addEventListener("mouseleave", relache, false);
      messlides[i].childNodes[0].addEventListener("mousedown", dragStart, false);
     }
     curseur = curseur1;
    }
    et ben ca marche plus
    je demisionne
    voila ou est l'erreur dans la console que l'on m'explique
    SCRIPT5007: Impossible d’obtenir la propriété « 0 » d’une référence null ou non définie
    Fichier : nouveauslide3.html, ligne : 81, colonne : 3
    Nom : Capture.JPG
Affichages : 254
Taille : 102,9 Ko
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  15. #55
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 913
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 913
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    re non psychadelic
    j'ai pompé sur personne

    je procède comme en vb si<0 alors 0 si >100 alors 100
    Mais non tu n'as pas compris, justement NoSmoking n'utilise pas de conditions c'est pourquoi je disais que c'était original du moins avant le poste de psychadelic...

    Citation Envoyé par psychadelic Voir le message
    ben non le max entre -25 et 0 ce sera toujours zéro... les chiffres négatifs sont tous inférieurs à zéro...

    Sinon c'est aussi la méthode que j'ai utilisé dans un post qui précede celui de @NoSmoking,, si ça ce peut il à pompé l'idée chez moi
    Hé hé oui oui mais juste aprés il écrit : pc = Math.min(pc, 100); et le min entre un nombre négatif et 100 (ou même 0) c'est ce nombre négatif...

    Mais si on inverse les deux instructions, ça devrait être bon, non ? C'est ce que tu as fait ?


    EDIT : Ah non si on inverse on aura un autre problème : si pc est supérieur ou égal à 100...
    Donc cette méthode ne marche pas toujours ???

    EDIT2 : Ah non c'est moi qui délire : je n'ai pas tenu compte que pc était affecté et donc si pc est négatif alors après la première instruction il sera égale à 0 !!!

    Je dois être fatigué comme Patrick...

  16. #56
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re une version qui fonctionne bien sur les 3 explorer (FF,CHROME,IE)
    version testé sur IE,FIREFOX,CHROME
    https://jsbin.com/tarudetubo/edit?html,output

    Code html : 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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    <!doctype html>
    <html lang="fr">
    <head>
     <!--meta charset="utf-8"-->
      <title>TEST SLIDE</title>
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
    <style>
    .fondd {
     border:1px solid green;
    background: linear-gradient(to bottom, rgba(220,220,220, 0) 44%, rgba(255, 255, 255, 0) 44%, rgba(33, 180, 226, 1) 53%, rgba(220,220,220, 0) 63%);
    margin-top:3px;
    user-select: none;
    -moz-user-select: none;
    -webkit-user-select: none;
    }
    .cur {
     background: linear-gradient(to bottom, rgba(220, 227, 145, 0.1) 0%, rgba(97, 196, 25, 1) 50%, rgba(180, 227, 145, 1) 100%);
    user-select: none;
    -moz-user-select: none;
    -webkit-user-select: none;}
    .cur2{
    background: linear-gradient(to bottom, rgba(240, 240, 0, 1) 0%, rgba(255, 50,0,1) 50%, rgba(240, 240, 0, 1) 100%);
    user-select: none;
    -moz-user-select: none;
    -webkit-user-select: none;}
    }
    </style>
     
    <script  type= "text/javascript">
    var largeur;
    var curseur;
    var oldX;
    var newX;
    var moinsX;
    var divi;
    function dragStart(event) {
     console.log(event.target.id);
     if (curseur === null) {
      curseur = event.target;
      curseur.className = ("cur2");
      var dragg = curseur.parentElement;
      largeur = curseur.parentElement.offsetWidth - (curseur.offsetWidth / 2);
      divi = (largeur - (curseur.offsetWidth / 2)) / 100;
      oldX = event.clientX + (document.documentElement.scrollLeft + document.body.scrollLeft);
      moinsX = oldX - curseur.offsetLeft;
     }
    }
    function dragging(event) {
     if (curseur != null) {
      newX = event.clientX + (document.documentElement.scrollLeft + document.body.scrollLeft);
      console.log("deplacement " + newX);
      var posX = newX - moinsX;
      if (posX < 0) {
       posX = 0;
      }
      if (posX > largeur - (curseur.offsetWidth / 2)) {
       posX = largeur - (curseur.offsetWidth / 2);
      }
      curseur.style.position = "absolute";
      curseur.style.left = posX + "px";
      document.getElementById("res").innerHTML = curseur.id + " : " + Math.round(curseur.offsetLeft / divi);
     }
    }
    function relache(event) {
     if (curseur != null) {
      console.log(curseur.id); 
      curseur.className = "cur";
      curseur = null;
     }
    }
    function ajoute() {
     var messlides = document.getElementsByClassName("fondd");
     for (var i = 0; i < messlides.length; i++) {
     
                    messlides[i].addEventListener("mousemove", dragging, false);
      messlides[i].addEventListener("mouseup", relache, false);
      messlides[i].addEventListener("mouseleave", relache, false);
      messlides[i].getElementsByClassName("cur")[0].addEventListener("mousedown", dragStart, false);
     }
     curseur = null;
    }
    </script>
    </head>
    <body>
       <div id="conteneur1" style="position:absolute;height:200px;left:28px;width:350px;border:2 solid red;">
          un slide pas comme les autre 
          <p id ="res">position</p>
          <br/><br/>
     
          <div id="fond1" class="fondd" style="position:relative;width:200px;height:26px;overflow:none;">
             <div id="curseur1" class="cur" style="position:absolute;top:5px;width:16px;height:16px;border-radius:8px;" unselectable="on"></div>
          </div>
     
          <div id="fond2"  class="fondd" style="position:relative;width:300px;height:26px;overflow:none;" >
             <div id="curseur2" class="cur" style="position:absolute;top:5px;width:26px;height:16px;border-radius:8px;" unselectable="on"></div>
          </div>
     
          <div id="fond3"  class="fondd" style="position:relative;width:300px;height:26px;overflow:none;">
             <div id="curseur3" class="cur" style="position:absolute;top:5px;width:10px;height:16px;border-radius:8px;" unselectable="on"></div>
          </div>
          <div id="fond4"  class="fondd" style="position:relative;width:110px;height:26px;overflow:none;">
             <div id="curseur4" class="cur" style="position:absolute;top:5px;width:16px;height:16px;border-radius:8px;" unselectable="on"></div>
          </div>
          <div id="fond5"  class="fondd" style="position:relative;width:300px;height:26px;overflow:none;" >
             <div id="curseur5" class="cur" style="position:absolute;top:5px;width:26px;height:16px;border-radius:8px;" unselectable="on"></div>
          </div>
     
    </div>
       <script>ajoute();</script>
    </body>
     
    </html>

    et aussi dans le webbrowser de VBA excel
    Nom : demo2.gif
Affichages : 302
Taille : 274,4 Ko
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  17. #57
    Membre extrêmement actif Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 532
    Par défaut
    ligne 26 tu a une accolade fermante en trop.

    et ça marche nickel sur Chromium ou FireFox chez moi

    Sinon, ton titre de ce dernier post ça va pas du tout !

    re une version qui fonctionne bien sur les 3 explorer (FF,CHROME,IE)

    bon le "s" manquant c'est pas grave, mais il s'agit de Navigateurs, de butineurs, ou de je ne sais quels autres noms exotiques pondu par l’académie Française, mais surtout pas du nom d'explorer qui est issu de juste l'ancien nom du navigateur de Microsoft.


    Sinon, je continue de penser qu'il serait préférable d'utiliser des removeEventListener. bien sur je n'imagine pas que tu puisses en mettre 100.000 sur une page, mais c'est sur chaque EventListener en cours freine forcément le système...

  18. #58
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 236
    Par défaut
    Fonction min-max :
    Citation Envoyé par psychadelic
    Sinon c'est aussi la méthode que j'ai utilisé dans un post qui précede celui de @NoSmoking ...
    cette méthode est un classique pour « fainéant » qui ne veulent pas écrire des if dans tous les sens.

    On aurait pu faire « pire » en écrivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      pc = Math.min(Math.max(pc, 0), 100);
    encore moins lisible mais qui peut faire l'objet d'une petite fonction de bornage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function bornage( val, min, max){
      return  Math.min(Math.max(val, min), max);
    }
    il faudrait quand même faire des tests d'usage dans la fonction !

    Utilisation directe de l'ID :
    Les navigateurs acceptent cette façon de faire attendu que lors du parsage les éléments DOM sont associés à une variable, mais cela reste une mauvaise pratique qui peut même s'avérer dangereuse, duplication de libellé.

    Utilisation de classList :
    Il y a bien une autre méthode qui consiste, après avoir mis un attribut tabindex sur les éléments, à utiliser la pseudo-classe focus dans le CSS, exit donc la gestion de la classe.

    D'une façon générale :
    Patrick, cela sert à quoi que l'on te mette des exemples fonctionnels pour que tu n'en tiennes pas compte.

  19. #59
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    j'aurais juste une petite question
    peut on mettre des le depart quelque chose du genre <div class="fondd fond"........
    et interoger ou un meme un getelementsByClassName("fond") en JS me les trouvera t il ou pas ?
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  20. #60
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    ne crois pas ca j'en tiens compte avec ton model j'ai appris pas mal de chose mais surtout ne pas oublier mon first support qui m'oblige des fois a coder facon DOM1 et je ne peux pas faire autrement

    et t'inquiet c'est pas parti a la poubelle mais je ne vais pas mettre du code que je serais incappable de deboguer
    tu fait ca depuis combien de temps toi
    moi je fait ca depuis un peu plus d'un ans par parsimonie et casiment tout les regles sont exactement le contraire de ce que j'ai appris en VB
    il faut tout désapprendre et réapprendre autrement
    je fait du VB depuis l'age de 14 ans j'en ai 48 j'ai etudier a l'ecole avec les MO5 et TO9 a la maison sur amstrad pc 6128 64 K plus tard VB puis VB6 tu vois le machin c'est meme plus dans la tete c'est dans les doigts
    tout vos exemple sont sauvegardé sous votre pseudo dans des fichier local que je décortiquerais ligne par ligne je sais ca fait un benet mais que veux tu ca s'ameliore pas en vieillissant

    et puis c'est de notoriété publique que plus j'ai la tronche dans le MUR plus je m'en sort
    t'inquiet je reviendrais vers toi si une ligne m'echappe dans ton code j'y manquerais pas

    par contre ma question post 59 est importante pour les skin différents dans une meme fonction j'ai deja la methode pour le curseur elle est deja operationelle et intégrée mais par pour le fond sachant qu'au depart il ont tous la meme classe et que je boucle sur elle pour leur attribuer les evenements
    je vais tester et voir ce que ca donne
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 4 PremièrePremière 1234 DernièreDernière

Discussions similaires

  1. [Modele] gérer des messages persos/coms
    Par leken11 dans le forum Ruby on Rails
    Réponses: 2
    Dernier message: 05/09/2007, 18h37
  2. Exécuter des JSP persos sur un Tomcat derrière IIS
    Par khayyam90 dans le forum Tomcat et TomEE
    Réponses: 7
    Dernier message: 11/05/2007, 11h28
  3. callback Win32 dans des classes perso
    Par NiamorH dans le forum Windows
    Réponses: 12
    Dernier message: 07/01/2007, 18h47

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