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 :

Actualiser une div pendant un drag


Sujet :

JavaScript

  1. #1
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut Actualiser une div pendant un drag
    Bonjour à tous

    Désolé je suis un peu rouillé, cela faisait quelques années que je n'avais plus pogrammé...

    Alos voilà mon problème actuel (je l'avais résolu dans le passé, il me semble, mais je ne retrouve plus le code)...

    C'est un peu comme tic-tac-toe :

    j'ai une div avec par exemple 5 span alignés à l'horizontale

    Je clique sur le 4ième, et je voudrais l'amener entre le 1er et le 2ème.

    Mais au moment où je passe sur le 3ième, j'aimerais que le 3ième se décale pour prendre la place du 4ième (ils n'ont pas les mêmes largeurs). Les spans sont avec des "float:left"...


    mais bien entendu ces déplacements seraient provisoires tant que l'utilisateur n'a pas relâché le pointeur, ou l'a relâché dans un endroit pas OK.. (un drag dynamique mais pas définitif)

    PS: si possible sans utiliser de flex..
    PPS: si avec flax, me dire comment je peux wrapper les elements quand ca rrive au bout de la taille donnee au conteneur

    Merci, et c'est toujours un plaisir d'avoir à venir sur ce forum génial
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    Jette peut-être un oeil à cette discussion là https://www.developpez.net/forums/d2...fichages-grid/

    En particulier le lien de NoSmo...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Salut,

    C'est le même principe utilisé ici : https://jqueryui.com/sortable/#placeholder

    Il y a ce fil récent qui te donne un exemple (sans Jquery) pour le principe : Tri par glisser-déposer sans jQuery

    Il faut adapter le principe à ton cas précis...

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut Solution
    OK j'ai trouvé la solution grâce à un post sur stackoverflow qui n'est même pas voté () !!!


    Malheureusement j'ai tellement cherché sur le net que j'ai perdu le lien dans l'historique de mes onglets... J'aurais volontiers cité cette personne, qui visiblement n'a pas reçu les louanges qu'il meritait pour une solution simple et élégante

    Alors je la présente ici :

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function movefct(elem,direction) {
      var parentElem = elem.parentElement;
     
      var elemIndex = Array.prototype.indexOf.call(parentElem.children, elem);
      if (direction===+1)
      parentElem.insertBefore(elem, parentElem.children[elemIndex + 2]);
      else
        parentElem.insertBefore(elem, parentElem.children[elemIndex -1]);
    }

    Et par exemple, si on veut bouger un élément à a la place d'un element b , il sufffit de faire :

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      var parentElem = a.parentElement;
     
      ndestination = Array.prototype.indexOf.call(parentElem.children, b);
      nsource = Array.prototype.indexOf.call(parentElem.children, a));
     
      if (nsource!=ndestination){
        if ( ndestination < nsource )
          movefct(a, -1);
       else
         movefct(a,+1);

    et il suffit juste de faire un refresh via :

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    function refresh(madiv){madiv.style.display="block";madiv.style.visibility="visible";madiv.style.display.opacity="1"}

    Simple et élégant, alors que ça regorge de jquery, et de choses compliquées...

    .

    Merci quand même à tous
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    O
    Alors je la présente ici :

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function movefct(elem,direction) {
      var parentElem = elem.parentElement;
     
      var elemIndex = Array.prototype.indexOf.call(parentElem.children, elem);
      if (direction===+1)
      parentElem.insertBefore(elem, parentElem.children[elemIndex + 2]);
      else
        parentElem.insertBefore(elem, parentElem.children[elemIndex -1]);
    }

    Et par exemple, si on veut bouger un élément à a la place d'un element b , il sufffit de faire :

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      var parentElem = a.parentElement;
     
      ndestination = Array.prototype.indexOf.call(parentElem.children, b);
      nsource = Array.prototype.indexOf.call(parentElem.children, a));
     
      if (nsource!=ndestination){
        if ( ndestination < nsource )
          movefct(a, -1);
       else
         movefct(a,+1);
    Oui c'est un code intéressant et effectivement à un moment donné il faut utiliser une méthode d'insertion (insertBefore ou insertAdjacentElement)...

    Mais toi tu posais la question dans le contexte d'un glisser/déposer or là, il y a peut-être plus simple et plus rapide que de chercher à chaque fois le rang (index) de chaque enfant (avec cette méthode il faut que les éléments soient des descendants directs (enfants) d'un même parent).

    En effet pendant le glisser tu as accès à l’élément survolé (evt.target) il suffit donc de faire une insertion par rapport à cet élément...

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Beginner. Voir le message
    Mais toi tu posais la question dans le contexte d'un glisser/déposer or là, il y a peut-être plus simple et plus rapide que de chercher à chaque fois le rang (index) de chaque enfant (avec cette méthode il faut que les éléments soient des descendants directs (enfants) d'un même parent).
    C'est le cas.. Comme je disais au début c'est un peu comme un tic-tac-toe..

    J'ai plusieurs divs, avec dans chacune une dizaine/douzaine d'enfants directs, qui sont ceux que l'on peut glisser/déposer DANS LA MÊME DIV...

    C'est donc tout à fait correct pour moi comme solution....


    J'ai essayé plein d'autres solutions proposées ici ou là (au moins une vingtaine), et rien ne marchait comme je souhaitais, ni aussi simplement...J'ai même essayé avec des flex, mais déjà ça ne marchait pas bien, et ensuite c'est de ce que j'ai lu pas compatible avec des écrans tactiles ou des interfaces pour handicapés...

    Bref cette solution me convient,,

    Merci à tous pour votre participation et intérêt et propositions
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Actualiser une div Parent depuis une IFRAME enfant ?
    Par Marmotton76 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/10/2012, 12h45
  2. actualiser une Div par ajax lors d'un changement coté serveur
    Par dajij dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 19/08/2008, 18h17
  3. Réponses: 3
    Dernier message: 28/05/2008, 12h17
  4. actualiser une DIV contenant des images
    Par jc_cornic dans le forum Langage
    Réponses: 6
    Dernier message: 21/10/2006, 15h42

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