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 :

lien avec drag&drop


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 40
    Par défaut lien avec drag&drop
    Bonjour à tous,

    je rencontre un problème lié au drag&drop :

    j'ai sur ma page plusieurs DIV (contenant des photos) dont la fonction drag&drop est appelée par javascript.
    Jusque là tout va bien...
    Or, lorsque je place un lien sur l'image contenue dans une DIV,
    la fonction drag&drop ne fonctionne plus.

    Je cherche une solution qui me permette par exemple d'atteindre mon lien par double-click pour que la fonction drag&drop soit conservée.
    Petite précision; le lien de l'image appelle un lightbox en javascript (et non un lien externe).

    J'ai donc le code suivant;

    mon drag&drop en javascript:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    function positionne(p_id, p_posX, p_pos_Y){
    document.getElementById(p_id).style.left = p_posX;
    document.getElementById(p_id).style.top = p_pos_Y;
    }
    function getPositionCurseur(e){
    //ie
    if(document.all){
    curX = event.clientX;
    curY = event.clientY;
    }
     
    //netscape 4
    if(document.layers){
    curX = e.pageX;
    curY = e.pageY;
    }
     
    //mozilla
    if(document.getElementById){
    curX = e.clientX;
    curY = e.clientY;
    }
    }
     
    function beginDrag(p_obj,e){
    isDragging = true;
    objectToDrag = p_obj;
    getPositionCurseur(e);
    ecartX = curX - parseInt(objectToDrag.style.left);
    ecartY = curY - parseInt(objectToDrag.style.top);
    }
     
    function drag(e){
    var newPosX;
    var newPosY;
    if(isDragging == true){
     
    getPositionCurseur(e);
    newPosX = curX - ecartX;
    newPosY = curY - ecartY;
     
    objectToDrag.style.left = newPosX + 'px';
    objectToDrag.style.top = newPosY + 'px';
     
    }
    }
    function endDrag(){
    isDragging = false;
    }
    et dans mon html :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    <head>
    <script type="text/javascript" src="lightbox.js"></script>
    </head>
    <body onmousemove="drag(event);">
    <div id="img" onmousedown="beginDrag(this,event);" onmouseup="endDrag();">
    <a href="image2.jpg" rel="lightbox">
    <img src="image1.jpg" width="70" height="99"/>
    </a>
    </div>
    <script type="text/javascript">
    positionne('img', '290px', '84px');
    isDragging = false;
    </script>
    </body>
    PS: vous aurez compris que je ne suis pas un foudre de guerre en programmation, je suis photographe de formation

  2. #2
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    en fait, si le lien n'en est pas un... vraiment, utilise un autre type de déclencheur neutre (div) parce que dragger un lien, c'est sûr que ça ne doit pas être facile;

  3. #3
    Membre chevronné Avatar de nadox
    Homme Profil pro
    Développeur
    Inscrit en
    Février 2010
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2010
    Messages : 360
    Par défaut
    Bonjour,

    Le problème n'est pas simple à résoudre.
    En fait, lightbox se déclenche lorsqu'on clique sur le lien.
    Le drag, lui, se déclenche lorsqu'on clique sur la div.
    Le problème est le suivant : le lien est contenu dans la div, et lorsqu'on clique, on clique avant tout sur le lien...
    Le drag ne pourra jamais se faire avant lightbox...
    La solution la plus simple consisterait à ne plus faire le drag/drop directement sur l'image, mais sur une 'poignée' à coté...(une grosse bordure, qui serait en fait une autre div par exemple)
    Je conviens cependant que ce n'est ni très esthétique, ni très ergonomique...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 40
    Par défaut
    oui en effet j'y ai pensé mais je voulais savoir s'il n'y avait pas une solution pour combiner les deux....

    Même en assignant un double-click (au lieu d'un click simple) au lien de l'image il y aurait le même problème ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 40
    Par défaut
    En cherchant sur le net, j'ai trouvé ce site : http://www.1-2-3-info.se/ c'est à peur prés l'effet de double-click que je souhaiterais avoir (en plus simple évidemment)

  6. #6
    Membre éclairé Avatar de Billy KiT
    Inscrit en
    Mars 2011
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 66
    Par défaut
    Salut, peut-être une idée :
    Sur ton lien (div), si la souris (ou le div parent) n'a pas bougé entre le mousedown et mouseup => déclencher le lien, sinon => drop.
    La fonction endDrag() peut par exemple renvoyer vrai si la souris a bougé sinon faux.
    Cependant, je ne sais pas si c'est possible de gérer les lightbox autrement qu'avec des liens <a>, en Javascript ?

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

Discussions similaires

  1. overflow vertical avec drag n drop
    Par cels dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 18/02/2012, 04h14
  2. update BDD avec Drag 'n Drop
    Par IceP42 dans le forum jQuery
    Réponses: 20
    Dernier message: 15/05/2009, 22h52
  3. problème avec drag and drop
    Par Nayra dans le forum Agents de placement/Fenêtres
    Réponses: 1
    Dernier message: 16/04/2009, 00h11

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