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. #21
    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
    Salutations..
    Bon, sans le gif d'animation je n'aurais sans doute jamais compris ce que tu voulais faire. ( le vrai nom doit être " Range-Slider " non ? )

    Faut dire aussi je suis sous Linux (mint) et que j'utilise principalement FireFox ou Chromium, et quelquefois Vivaldi.
    Et je suis beaucoup plus à l'aise avec jQuery que le vanilla JS.

    j'ai quelques remarques :
    1_ en HTML5 les "sliders" sont directement implémentés, et on doit pouvoir changer [un peu ?] leur présentation en jouant sur le css :
    ==> http://jsfiddle.net/z39Ne/3/

    Bien sur il doit exister sur GitHub des tas de Sliders tout fait, mais à titre perso, moi aussi je préfère les recoder à ma sauce, question d’apprentissage et de satisfaction intellectuelle.

    mais de cette petite exploration quelques idées :
    changer la couleur du curseur quand il est activé ==> http://jqueryui.com/slider/
    avoir 2 couleurs sur la barre, une avant une apres, ou mieux avoir une couleur présentant la position initiale...
    ==> https://www.cssscript.com/responsive...t-rangeslider/

    voila, en espérant ne pas t'avoir trop démoralisé

  2. #22
    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
    Bonjour psychadelic
    je vais regarder tes liens j'ai vu le premier
    et il demontre exatement ce que je ne veux pas et qui se produit dans IE a savoir un espacement minimum entre elle (j'en ai 4) et le curseur fonctionne meme si je ne suis pas dans la bande bleu c'est un probleme propre a IE
    voila maintenant c'est toi qui est démoralisé non?
    je te fait un gif du probleme si tu veux avec ton lien (le 1er) pour mieux comprendre
    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

  3. #23
    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
    voila demo de ton lien imagine que j'en ai 4 l'un en dessous de l'autre
    j'avais essayé l'année dernier de jouer avec le css pour reduire cet ecart mais c'etait pas viable donc conclusion (input range poubelle avec IE)

    Nom : demo2.gif
Affichages : 573
Taille : 111,5 Ko
    voila tu deprime non?
    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

  4. #24
    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
    pour te donner une idée encore plus precise du probleme avec IE j'ai mis une bordure a l'input et ce rectangle n'est pas modifiable du moins pas a ma connaissance

    tu remarquera que dans le css inline j'ai mis un height si tu le modifie tu verra que c'est la bande bleu qui est modifiée pas le rectangle rouge

    Nom : Capture.JPG
Affichages : 482
Taille : 127,5 Ko
    voila le soucis avec l'input range et IE
    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. #25
    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
    heu, si j'ai bien compris tu ne veux pas que le curseur puisse avancer par sacade ?

    en fait c'est parce que la disance est censée correspondre à une valeur fixe.
    Exemple pour des valeurs de 0 à 4, le curseur ne peut se positionner que tout les 25% de la distance à parcourir.
    et j'imagine que la précision est sujette à la taille du pixel.

    en fait tu recherche quelque chose comme ça ?

    https://refreshless.com/nouislider/s...ion-non-linear

  6. #26
    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
    non tu n'a pas compris
    les saccades sont pas un soucis que j'ai abordé pour le moment d'ailleurs je n'en ai pas mais tu fait bien de le souligner
    je t'ai donné une capture dans IE
    voila exactement la meme dans firefox et la!!! le height dans le css inline joue son role


    capture firefox
    Nom : demo2.gif
Affichages : 516
Taille : 52,0 Ko

    voila pourquoi je ne veux pas de input type range dans mon wysiwyg trop compliqué a gerer avec IE si tant est que se soit possible sans usine a gas css ou JS
    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

  7. #27
    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
    ah, oui, le html range n'est pas propre, j'ai fait un essai avec chromium et c'est pire, le css n'est pas pris en compte et le bouton est rainuré !

    Sinon mon noUiSlider peut sans doute intéresser, je l'ai utilisé il y a quelques années et il est entièrement customisable en css...

    PS : j'ai vu que tu mettais systématiquement ton css directement dans le HTML en utilisant l'attribut style ?!
    c'est pas des plus lisible...

  8. #28
    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 je l'ai mis inline html le css juste pour te montrer que le cssn'est pas pris en compte ni dans IE ni dans CHROME

    c'est pas mal ton truc la c'est un peu genant pour le transport mais y a des truc interessant
    je l'ai telechargé
    sinon mon dernier model en pure JS fonctionne
    j'ai juste un soucis avec le mouseout que je ne pige pas
    demo de mon model
    un simple div avec un gradient et un autre a l'interieur pour le curseur
    le fil(rail) du curseur c'est le gradient
    je n'ai pas mis de cadre au div conteneur ca fait un joli effet (juste le rail et le curseur
    comme tu peux le voir si je m'eloigne trop ca s'arrete et si je suis assez proche meme pas tout a fait dessus ca fonctionne
    j'ai donc une certaine flexibilité avec la souris mais pas comme le range qui a 3 cmetres marche encore
    et le top c'est que contrairement a l'input range c'est que le resultat est absolument identique dans IE,CHROME,FIREFOX
    Nom : demo2.gif
Affichages : 466
Taille : 223,0 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

  9. #29
    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 patricktoulon Voir le message
    j'ai juste un soucis avec le mouseout que je ne pige pas
    Il ne capte la position de ta souris uniquement que si celle-ci se trouve à l'intérieur du rectangle d'encombrement (RE) de ton slider.
    mais il lie les event de position uniquement à ce rectangle que si il y a eu un mousse down sur le curseur vert.

    si la souris est en dehors de ce rectangle le mousse up ne peut plus être détecté et ton slider n'est plus contrôlable proprement sauf à introduire un mousse up et down dans ce RE.

    s'il n'y pas eu de mousse up en dehors de ton rectangle et que la souris retourne dans le RE, alors le curseur saute directement sur la position de la souris.

    une solution consisterait à considérer tout mousse out comme un abandon du contrôle, mais je sais pas trop, ça fait des tas de possibilités à gérer, surtout si tu à 3 ou 4 sliders en concurrence ayant tous eu une sortie de souris...

    Ps pour jouer sur des couleurs différentes sur la barre de fond, tu peux utliliser les pseudo éléments css :before et :after ; ça évite d'alourdir le code HTML.

  10. #30
    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
    ah oui, j'avais pas tout vu sur ton pb de mouseOut.

    en fait je crois que le problème viens du fait que tu attache en permanence les evt sur ton objet..
    je pense que cela pourrait être mieux si tu n'attachait ses evt uniquement apres le mousseDown pour les désactiver en suite des qu'il y a une sortie, et non pas au travers d'un flag (sl)

  11. #31
    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
    Bon, ton truc m'a vraiment turlupiné l'esprit, et j'ai pris un peu de temps pour creuser la question .

    le pb du MousseOut à été vicieux, car en fait tout donne l'impression qu'un evt MousseOut est généré quand il quitte le curseur, même s'il est toujours dans la div du parent.
    Quitte à générer un autre evt MouseOut pour la fois ou il quitte vraiment la div du parent.
    mais tout ces evt MouseOut sont quand même envoyé sur la div parent, qu'il s'agisse du curseur ou de sa div parent.

    Dans un premier temps j'ai songé à capter le mouseout sur le curseur et de placer un event.stopPropagation sur le curseur pour éviter de le retrouver sur son parent, mais cela risquait d'annuler un vrai mouseout sur le parent.

    Du coup j'ai du bricoler un calcul de la position de la souris pour vérifier s'il s'agissait d'un bien d'un vrai mouseout ou non.

    J'ai aussi choisi d'en passer par des removeEventListener, je trouve cela plus propre, d'autant que j'ai mis 3 sliders sur la page...


    le code marche aussi pour des sliders de taille différentes, enfin je te laisse découvrir tout ça
    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
    <!doctype html>
    <html lang="fr">
    <head>
    	<meta charset="UTF-8">
    	<title>TEST SLIDE</title>
    	<meta http-equiv="X-UA-Compatible" content="IE=edge">
    	<style>
                    .Conteneur > div {
                            position:relative;
                            width:108px;
                            height:25px;
                            border:1px solid aliceblue;
                    }
                    .Conteneur > div:before {
                            position:absolute;
                            top:10px;
                            left:0;
                            display: block;
                            width:100%;
                            height:5px;
                            background: linear-gradient(to bottom, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0) 44%, rgba(33, 180, 226, 1) 53%, rgba(255, 255, 255, 0) 100%);
                            content:'';
                    }
                    .Conteneur > div > span {
                            position : absolute;
                            top:5px;
                            left:2px;
                            display: block;
                            width:8px;
                            height:15px;
                            border-radius:4px;
                            background: linear-gradient(to bottom, rgba(180, 227, 145, 1) 0%, rgba(97, 196, 25, 1) 50%, rgba(180, 227, 145, 1) 100%);
                    }
                    .Conteneur > div > span.Actif {
                            background: linear-gradient(to bottom, rgb(181, 145, 227) 0%, rgb(196, 25, 173) 50%, rgb(227, 145, 220) 100%);
                    }
            </style>
    </head>
     
    <body>
     
    	<div class="Conteneur">
    		<h4>premier Slider</h4>
    		<p>0</p>
    		<div><span></span></div>
    	</div>
     
    	<div class="Conteneur">
    		<h4>second Slider</h4>
    		<p>0</p>
    		<div><span></span></div>
    	</div>
     
    	<div class="Conteneur">
    		<h4>troisieme Slider</h4>
    		<p>0</p>
    		<div><span></span></div>
    	</div>
     
    	<script>
                    var 
                            ref_Conteneurs = document.getElementsByClassName('Conteneur'),
                            SlidersInitValue = 50,
                            SlidersActivClass = 'Actif'
                    ;
     
                    for (let i = 0; i < ref_Conteneurs.length; i++) {
                            ref_Conteneurs[i].getElementsByTagName('p')[0].innerHTML = SlidersInitValue.toString();
                            ref_Conteneurs[i].getElementsByTagName('span')[0].style.left = SlidersInitValue +'px';
                            ref_Conteneurs[i].getElementsByTagName('span')[0].addEventListener("mousedown", CurseurActif);
                    }
     
                    function CurseurActif(e) {
                            this.classList.add(SlidersActivClass);
                            this.parentNode.addEventListener("mousemove", MsMvCursor,false);
                            this.parentNode.addEventListener("mouseout", StopTrackinkMsOut); 
                            this.parentNode.addEventListener("mouseup", StopTrackinkMsUp);
                    }
     
     
                    function MsMvCursor(e) {
                            var
                            posLeft = e.pageX - this.offsetLeft, 
                            SzDiv = this.getBoundingClientRect();
                            SzCur = this.getElementsByTagName('span')[0].getBoundingClientRect();
                            
                            posLeft -= (SzCur.width / 2);
                            posLeft = Math.max(posLeft,0);
                            posLeft = Math.min(posLeft,( SzDiv.width - SzCur.width -2));
     
                            this.parentNode.getElementsByTagName('p')[0].innerHTML = posLeft;
                            this.getElementsByTagName('span')[0].style.left = posLeft +'px';
                    }
     
                    function StopTrackinkMsOut(e) {
                            var
                            posLeft = e.pageX - this.offsetLeft, 
                            posTop = e.pageY - this.offsetTop,
                            SzDiv = this.getBoundingClientRect();
     
                            if ( posLeft < 1 || posTop < 1  ||  posLeft >= SzDiv.width || posTop >= SzDiv.height  ) {
                                    this.removeEventListener("mousemove", MsMvCursor);
                                    this.removeEventListener("mouseout", StopTrackinkMsOut); 
                                    this.removeEventListener("mouseup", StopTrackinkMsUp); 
                                    this.getElementsByTagName('span')[0].classList.remove(SlidersActivClass);
                            }
                    }
     
                    function StopTrackinkMsUp(e) {
                            this.removeEventListener("mousemove", MsMvCursor);
                            this.removeEventListener("mouseout", StopTrackinkMsOut); 
                            this.removeEventListener("mouseup", StopTrackinkMsUp); 
                            this.getElementsByTagName('span')[0].classList.remove(SlidersActivClass);
                    }
            </script>
    </body>
    </html>

  12. #32
    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
    joli moi aussi j'avais avancé j'en peux mettre 36 et il apellent tous la meme fonction

    cela dit ton exemple
    et ben toi aussi tu t'ai fait avoir tu a exactement le meme probleme que moi qui se produit
    a savoir
    quand tu slide > sort en restant appuyé >>reviens dessus en restant appuyé >> relache(mouseup) le slide se fait quand meme
    et si tu rappuie dessus walouh tu peux plus le bouger

    demonstration avec le premier curseur regarde le moment ou j'ai le petit panneau sens interdit (plus moyen de slider) et juste avant tu le vois bouger et pourtant je suis pas appuyé
    Nom : demo2.gif
Affichages : 508
Taille : 108,0 Ko

    ca te turlupine moi ca m'a grillé les neurones qui me restait j'ai tourné ca dans tout les sens rien impossible de trouver pourquoi j'ai mis des console .log partout , tout est bon sauf que le mouseout ne fait pas son role mais si console dit le contraire
    désolé pour tes neuronnes
    je vais analiser ton code

    EDIT:
    par contre je viens de tester sur Firefox et ca fonctionne c'est vraiment un comportement propre a IE

    attention a getBoundingClientRect j'ai remarqué des acrochages intempestif avec firefox j'ai trouver pas mal de cas suir le net dans divers forums c'est pour ca que je cherche a ne pas l'utiliser
    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. #33
    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
    bonjour psychadelic
    ce matin ca me turlupinais a moi aussi en en faisant un peu de netoyage dans mon code et faisant les test j'ai enfin compris ce qui se passait avec IE
    c'etait devant nos yeux du moins les miens il me semble que tu n'utilise pas IE
    c'est vraiment bete regarde bien ce qui se passe surtout quand je fait celui d'en bas
    car ce qui sont au dessus reamorce par le move du conteneur dans le quel je tombe en sortant du slider utilisé on ne vois donc pas le phénomène
    Nom : demo2.gif
Affichages : 466
Taille : 268,4 Ko
    le probleme est simple comme je suis appué en sortant que se passe t il? et bien en fait je créé une selection (range) le conteneur n'a plus le focus et n'a donc pas executer son mouse out ce qui fait que quand je reviens dessus le curseurr n'est plus identifié
    il va faloir donc que je shunte cette selection
    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

  14. #34
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 212
    Par défaut
    On s’absente « 10 mn » et la discussion grossie de 20 posts, difficile dans ce cas de suivre sereinement celle ci, ça tire dans tous les sens

    Tout d'abord concernant les <input type="range"> sur IE :
    Citation Envoyé par post #24
    pour te donner une idée encore plus precise du probleme avec IE j'ai mis une bordure a l'input et ce rectangle n'est pas modifiable du moins pas a ma connaissance
    essaie de mettre un padding:0 et tu verras que cela devrait rentrer dans l'ordre
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="range" style="padding:0; border: 1px solid red">

    Attachement événement :
    Citation Envoyé par psychadelic
    je pense que cela pourrait être mieux si tu n'attachait ses evt uniquement apres le mousseDown pour les désactiver en suite des qu'il y a une sortie ...
    cette approche est effectivement la meilleur dans ton cas et souvent pratiquée.

    Evénement mouseout :
    Il est préférable d'utiliser l'événement mouseleave qui permet de gérer également les enfants du conteneur.

    Ergonomie :
    Pour moi le fait de sortir du « slider » doit abandonner le déplacement et ne pas le reprendre lors d'un retour du survol, c'est ce que je n'aime pas sur la façon de faire des navigateurs.

    Déplacement interrompu :
    Citation Envoyé par patricktoulon
    quand tu slide > sort en restant appuyé >>reviens dessus en restant appuyé >> relache(mouseup) le slide se fait quand meme
    et si tu rappuie dessus walouh tu peux plus le bouge
    Ici c'est un problème lié à la sélection qui s'effectue lorsque tu promènes la souris sur la page avec le bouton enfoncé, tu devrais le savoir puisque tu l'utilises pour tes sélections.

    La solution consiste à interdire la sélection via l'événement selectstart lorsque que tu es en mode « slider ». Dans ce cas il ne faut pas oublier de supprimer les éventuelles sélections faite sur le document, ça tu sais le faire.

    Ma contribution :
    Fichier de test issu de ce que j'ai jadis fait.
    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
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    <!DOCTYPE HTML>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Slider simple</title>
    <meta name="Author" content="NoSmoking">
    <meta name="DVP-discussion" content="d1821219">
    <style>
    html, body {
      margin: 0;
      padding: 0;
      font: 1em/1.5 Verdana,sans-serif;
    }
    main, #main {
      display: block;
      margin: 0 auto;
      max-width: 60em;
    }
    h1, h2, h3 {
      color: #069;
    }
    .slider {
      position: relative;
      width: 15em;
      height: 1.5em;
      margin: .75em 0;
      border: 1px dotted transparent;
      border-radius: 5px;
      font-size: 1em;
      color: #CDE;
      background-image: linear-gradient(to bottom, #FFF, #888, #FFF);
      background-position: center;
      background-repeat: no-repeat;
      background-size: 100% 50%;
      cursor: pointer;
    }
    .slider > div {
      position: absolute;
      top: 50%;
      left: 50%;
      width: 1.5em;
      height: 1.5em;
      border: 1px solid #888;
      border-radius: 25%;
      background: #FFF;
      box-shadow: 0 0 1em #CCC inset;
      transform: translate( -50%, -50%);
    }
    .slider.slider-actif {
      border-color: currentColor;
      color: #ABC;
      background-image: linear-gradient(to bottom, #FFF, currentColor, #FFF);
    }
    .slider.slider-actif > div {
      background: #DEF;
      box-shadow: 0 0 1em #ABC inset;
    }
    .slider::after {
      content: attr(data-value);
      position: absolute;
      right: -1em;
      width: 4em;
      text-align: right;
      font-size: .8em;
      color: #00F;
      transform: translateX(100%);
    }
    </style>
    </head>
    <body>
      <main>
        <h1>Slider simple</h1>
        <div class="slider"></div>
        <div class="slider"></div>
        <div class="slider"></div>
        <div class="slider"></div>    
      </main>
    <script>
    function getMousePos(elem, ev) {
      var rect = elem.getBoundingClientRect();
      return {
        "x": ev.clientX - rect.left,
        "y": ev.clientY - rect.top
      };
    }
    function handlerStopSelection(ev){
      ev.preventDefault();
    }
    function handlerMouseMove(ev) {
      var elem = this;
      // calcul position en %
      var larg = elem.offsetWidth;
      var posX = getMousePos(elem, ev).x;
      var pc = posX / larg * 100;
      // gestion dépassements
      pc = Math.max(pc, 0);
      pc = Math.min(pc, 100);
      // place le curseur
      elem.firstElementChild.style.left = pc + "%";
      // affichage valeur
      elem.setAttribute("data-value", pc.toFixed(1) + "%");
    }
    function handlerMouseUp(ev) {
      var elem = this;
      // suppression style
      elem.classList.remove("slider-actif");
      // désaffecte les événements mouse  
      elem.removeEventListener("mousemove", handlerMouseMove);
      elem.removeEventListener("mouseup", handlerMouseUp);
      elem.removeEventListener("mouseleave", handlerMouseUp);
      // restaure selection sur document
      document.removeEventListener("selectstart", handlerStopSelection);  
    }
    function handlerMouseDown(ev) {
      var elem = this;
      // ajout class style  
      elem.classList.add("slider-actif");
      // affecte les événements mouse
      elem.addEventListener("mousemove", handlerMouseMove, false);
      elem.addEventListener("mouseup", handlerMouseUp, false);
      elem.addEventListener("mouseleave", handlerMouseUp, false);
      // positionne le curseur
      handlerMouseMove.call(elem, ev);
      // clear les sélections en cours
      var oSel = window.getSelection();
      oSel.removeAllRanges();
      // interdit selection sur document  
      document.addEventListener("selectstart", handlerStopSelection, false);
    }
    // init des sliders
    var oSlider = document.querySelectorAll(".slider");
    var i;
    var nb = oSlider.length;
    for (i = 0; i < nb; i += 1) {
      oSlider[i].appendChild(document.createElement("DIV"));
      oSlider[i].addEventListener("mousedown", handlerMouseDown, false);
    }
    </script>
    </body>
    </html>
    c'est perfectible mais devrait t'apporter des réponses.

    [EDIT] arf!! nos messages se sont croisés et je vois que tu as mis le doigt sur le soucis

  15. #35
    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
    bonjour nosmoking
    oui en effet le but est que si je derape avec la souris le slide s'arrete curseur devient null il faut donc revenir dessus et apuyé a nouveau et en restant appuyé glisser le curseur

    le probleme etait effectivement la "SELECTION QUI SE CREE" et qui continue si je reste appuyé comme le montre la demo j'ai donc ajouter l'attribut unselectable="on"
    visiblement ca fonctionne
    attention ce phénomene est propre a IE dans FF ca ne le fait pas
    je vais tester le padding0 sur les input range et tester aussi ton code
    merci
    et puis tu sais ce qu'on dit
    "quand le chat n'est pas la ,la souris danse"
    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

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Ah je vois que vous avez avancé... Je n'ai pas encore tout tester...
    Citation Envoyé par patricktoulon Voir le message
    oui l'evenement document.mouse.... et beaucoup plus permissif c'est sur
    mais je ne peux pas l'utiliser car il l'est deja pour le meme genre de chose en plus il m'est donc tres ennuyeux de devoir tout refaire
    Ah tu n'as pas bien lu mes réponses :
    Citation Envoyé par Beginner. Voir le message
    Mais effectivement j'ai dû passer par document (ou bien document.body) et justement je me suis demandé si c'était un problème et j'ai cherché un autre moyen (je crois que c'est possible c'est à voir) mais bon par rapport au problème que tu soulèves je crois qu'on peut associer plusieurs fonctions au document.body.onXXX mais il faut je crois utiliser addEventListener et non document.body.onXXX = uneFonction, c'est à voir...
    Bon il va falloir que je teste mais tu peux aussi le faire donc tu peux vérifier qu'on peut associer plusieurs fonctions différentes à un même événement avec addEventListener c'est un de ses intérets par rapport à "document.body.onXXX = uneFonction"...

    Citation Envoyé par patricktoulon Voir le message
    voila demo de ton lien imagine que j'en ai 4 l'un en dessous de l'autre
    j'avais essayé l'année dernier de jouer avec le css pour reduire cet ecart mais c'etait pas viable donc conclusion (input range poubelle avec IE)
    voila tu deprime non?
    Oui mais qu'en est-il si tu mets le input dans une div (dont tu peux fixer le height) avec un overflow à hidden ?

    Citation Envoyé par patricktoulon Voir le message
    demonstration avec le premier curseur regarde le moment ou j'ai le petit panneau sens interdit (plus moyen de slider) et juste avant tu le vois bouger et pourtant je suis pas appuyé
    Oui justement c'est à cause de l'apparition de cette image "panneau sens interdit" que mon code bugge parfois même si c'est rare, je pense que ça arrive quand le navigateur croit que tu veux faire un glisser/déposer c'est pourquoi je voulais l'annuler mais c'est loin d'être simple apparemment...

  17. #37
    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
    bonjour beguinner

    nosmoking a eu la meme idé que moi "supprimer la selection" dans l'evenement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var oSel = window.getSelection();
      oSel.removeAllRanges();
    je ne l'ai pas fait comme ca pour raison de compatibilite FF mais c'est l'idée
    j'ai simplement ajouté l'attribut "unselectable" sur les curseurs

    mais j'ai encore des perte du mouvement quand je suis toujours a l'interieur
    peut etre en effet il faut que des que curseur n'est plus null supprimer le listener mousedown a fin qu'il ne reste plus que le move et out du conteneur du curseur

    nosmoking tes curseurs sont classes
    apres cette maniere de coder je suis perdu il y création de classe d'object pour le peu que j'en comprend c'est ca ?

    oh puré nosmoking sans le vouloir tu viens de repondre a une question que je me pose depuis 3 semaines
    en vb on utilise des variables "type"

    j'explique
    plutot que changer une variable dans son utilisation on la type avec plusieurs propriétés( mavariable.prop1 ,mavariable.prop2,etc.....)en ayant déclaré le type en amont du code
    je cherchais comment faire la meme chose en JS et tu viens de me le montrer avec getMousePos
    donc merci
    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

  18. #38
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 212
    Par défaut
    je ne l'ai pas fait comme ca pour raison de compatibilite FF mais c'est l'idée
    j'ai simplement ajouté l'attribut "unselectable" sur les curseurs
    avec unselectable tu es compatible IE et surtout IE point

    peut etre en effet il faut que des que curseur n'est plus null supprimer le listener mousedown a fin qu'il ne reste plus que le move et out du conteneur du curseur
    Non c'est l'inverse on garde le mousedown et on supprime les autres.

    nosmoking tes curseurs sont classes
    c'est très subjectif et affaire de goût.

    cette maniere de coder je suis perdu il y création de classe d'object pour le peu que j'en comprend c'est ca ?
    Non c'est une façon de coder classique, qui pourrait être améliorée dans ce cas, je comprend que cela puisse te surprendre attendu que depuis le temps tu codes à l'arrache et que la présentation de ton code laisse à désirer, mais c'est aussi une affaire de goût

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Bon tu as déjà vu que ce code : http://jsbin.com/xedocumete/edit?js,output fonctionnait mais que le problème persiste sur IE...

    J'ai essayé d'annuler le glisser/déposer pour éviter l'apparition de cette image "panneau sens interdit" mais le problème c'est que toutes les solutions dont je parle ici : Interdire le glisser/déposer d'un élément ? empêche peut-être le glisser/déposer mais pas l'apparition de cette image "panneau sens interdit" ce qui cause le bug car dans ce cas les autres événement comme le mousseup ne sont pas pris en compte...

    Et si on fait draggable="false" les événements comme le ondragstart ne sont pas déclenché alors mon idée c'est au contraire d'autoriser le glisser/déposer avec draggable="true" et rajouter cette fonction :


    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    curseur.ondragstart = function (event) {  
     
        event.preventDefault();
       // curseur.isMousseDown = false;
    };

    Et là ça marche très bien, l'image "panneau sens interdit" n’apparaît plus !!! Et du coup ça marche le onmousemove et le onmouseup sont de nouveau détectés...

    PS : La ligne curseur.isMousseDown = false; puisque le onmouseup est de nouveau détecté mais ça peut être une précaution supplémentaire...

    JSBin ne fonctionne plus chez moi alors teste en rajoutant au code que j'ai mis là http://jsbin.com/xedocumete/edit?js,output la fonction ci-dessus et rajoute sur la balise curseur draggable="true"...

    ----------> Si ça se trouve la raison pour laquelle ça persiste sur IE c'est que parfois tu sélectionnes du texte et du coup on a un glisser/déposer de ce texte... Je l'ai aussi parfois sur Chrome...
    Si c'est bien ça alors plus besoin de la solution ci-dessus...

  20. #40
    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
    bon ben apres avoir analiser ton code que je comprend un petit peu mieux
    j'en ai conclu que dans mon modele le probleme venait de mouseout je l'ai donc remplacé par mouseleave
    et miracle je n'ai plus le probleme a l'interieur et ni a l'exterieur en effet mouseleave comprend le conteneur et tout ce qu'il peut y avoir a l'interieur selon le tuto
    et je ne supprime meme pas les evenements( rien ne m'en empeche bien sur) histoire de decharger un peu la memoire
    je met ca au propre
    merci et j'espere que je te donne pas trop envie de Vomir hein

    j'aurais appris classList bien plus prtique que travailler avec le string
    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 2 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, 17h37
  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, 10h28
  3. callback Win32 dans des classes perso
    Par NiamorH dans le forum Windows
    Réponses: 12
    Dernier message: 07/01/2007, 17h47

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