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

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 40
    Points : 10
    Points
    10
    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 681
    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 681
    Points : 5 221
    Points
    5 221
    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 confirmé 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
    Points : 551
    Points
    551
    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 à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 40
    Points : 10
    Points
    10
    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 à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 40
    Points : 10
    Points
    10
    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 régulier Avatar de Billy KiT
    Inscrit en
    Mars 2011
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 66
    Points : 73
    Points
    73
    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 ?

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 40
    Points : 10
    Points
    10
    Par défaut
    oui en effet ça serait une solution, mais pareil je ne sais pas s'il y a d'autres possibilités de liens...

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 40
    Points : 10
    Points
    10
    Par défaut
    Et puis je crains que le lien se déclenche de toute façon sur le onmousedown

  9. #9
    Membre confirmé 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
    Points : 551
    Points
    551
    Par défaut
    Lightbox fonctionne de la façon suivante :

    - Lorsque la page est chargée, il parcoure le DOM
    - Dans le DOM, il cherche tous les liens contenant une image et ayant l'attribut - Chaque élément trouvé est stocké dans un tableau javascript
    - Chaque lien trouvé se voit attribuer un gestionnaire d'évènement sur le click(onmousedown) qui déclenche l'affichage en fenêtre modale.

    Il faudrait donc modifier le fonctionnement de lightbox afin de "court-circuiter" le gestionnaire d'évènement et gérer l'affichage de la fenêtre modale dans un gestionnaire d'évènement personnalisé.

    Ce n'est pas impossible, mais je ne crois pas que ça soit évident à faire sans bien connaître javascript...

  10. #10
    Membre régulier Avatar de Billy KiT
    Inscrit en
    Mars 2011
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 66
    Points : 73
    Points
    73
    Par défaut
    Autocitation :
    Citation Envoyé par Billy KiT Voir le message
    Salut, peut-être une idée :
    Sur ton lien (div), si la souris n'a pas bougé entre le mousedown et mouseup => déclencher le lien, sinon => drop.
    J'ai fait un test , ça fonctionne parfaitement bien avec <div onmouseup="...> au lieu de <a href="...>.
    Le probleme réside dans l'attribut "rel" pour la gestion des lightbox ...

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 40
    Points : 10
    Points
    10
    Par défaut
    oui je crois que c'est un peu ambitieux,

    merci de votre réactivité en tout cas

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 40
    Points : 10
    Points
    10
    Par défaut
    J'ai la solution,

    Le lien se déclenche tout simplement sur le click qui précède le double-clic.
    La solution consiste donc à désactiver le clic avant de transformer le click en double-clic. Ce qui donne dans la fonction initLightbox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for (var i=0; i<anchors.length; i++){
    	var anchor = anchors[i];
    	if (anchor.getAttribute("href") && (anchor.getAttribute("rel") == "lightbox")){
    	    	anchor.onclick = function () {return false;}
    		anchor.ondblclick = function () {showLightbox(this); return false;}
    Pour le drag and drop, ajouter une class drag avec une position relative sur les éléments mobiles,
    on a donc :

    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
     
    <head>
    <style type="text/css">
    .drag {display:block;position:relative;border:0;}
    img {display:block}
    </style>
    </head>
    <script type="text/javascript" src="lightbox.js"></script>
    <script type="text/javascript">
    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;
    }
    var dragobject={
    	x:0, y:0, offsetx:null,offsety:null,targetobj:null,dragapproved:0,
    	initialize:function(){
    		document.onmousedown=this.drag
    		document.onmouseup=function(){this.dragapproved=0}}
    	,drag:function(e){
    		var evtobj=window.event? window.event:e
    		this.targetobj=window.event? event.srcElement:e.target
    		while (this.targetobj.className!="drag" && this.targetobj.tagName!="BODY") this.targetobj=this.targetobj.parentNode
    		if (this.targetobj.className=="drag"){
    			this.dragapproved=1
    			if (isNaN(parseInt(this.targetobj.style.left))){this.targetobj.style.left=0}
    			if (isNaN(parseInt(this.targetobj.style.top))){this.targetobj.style.top=0}
    			this.offsetx=parseInt(this.targetobj.style.left)
    			this.offsety=parseInt(this.targetobj.style.top)
    			this.x=evtobj.clientX
    			this.y=evtobj.clientY
    			if (evtobj.preventDefault) evtobj.preventDefault()
    			document.onmousemove=dragobject.moveit}}
    	,moveit:function(e){
    		var evtobj=window.event? window.event:e
    		if (this.dragapproved==1){
    			this.targetobj.style.left=this.offsetx+evtobj.clientX-this.x+"px"
    			this.targetobj.style.top=this.offsety+evtobj.clientY-this.y+"px"
    		return false}}
    }
    dragobject.initialize()
    </script>
    <body>
    <div id="idm" class="drag">
    <a href="98.jpg" rel="lightbox"><img src="98.jpg" width="70" height="99"/></a>
    </div>
    <script type="text/javascript">
    	positionne('idm','290px','84px');
    </script>
    </body>

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 40
    Points : 10
    Points
    10
    Par défaut
    d'ailleurs cela m'emmène à vous poser une autre question;

    Quel est le code à ajouter pour modifier le z-index de mes divs lorsqu'elles sont sélectionnées, de façon à ce qu'elles passent automatiquement au premier plan ?

    en sachant que mon script drag&drop est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    var dragobject={
    	x:0, y:0, offsetx:null,offsety:null,targetobj:null,dragapproved:0,
    	initialize:function(){
    		document.onmousedown=this.drag
    		document.onmouseup=function(){this.dragapproved=0}}
    	,drag:function(e){
    		var evtobj=window.event? window.event:e
    		this.targetobj=window.event? event.srcElement:e.target
    		while (this.targetobj.className!="drag" && this.targetobj.tagName!="BODY") this.targetobj=this.targetobj.parentNode
    		if (this.targetobj.className=="drag"){
    			this.dragapproved=1
    			if (isNaN(parseInt(this.targetobj.style.left))){this.targetobj.style.left=0}
    			if (isNaN(parseInt(this.targetobj.style.top))){this.targetobj.style.top=0}
    			this.offsetx=parseInt(this.targetobj.style.left)
    			this.offsety=parseInt(this.targetobj.style.top)
    			this.x=evtobj.clientX
    			this.y=evtobj.clientY
    			if (evtobj.preventDefault) evtobj.preventDefault()
    			document.onmousemove=dragobject.moveit}}
    	,moveit:function(e){
    		var evtobj=window.event? window.event:e
    		if (this.dragapproved==1){
    			this.targetobj.style.left=this.offsetx+evtobj.clientX-this.x+"px"
    			this.targetobj.style.top=this.offsety+evtobj.clientY-this.y+"px"
    		return false}}
    }
    dragobject.initialize()
     
     
    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;
    }

  14. #14
    Membre confirmé 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
    Points : 551
    Points
    551
    Par défaut
    Bonsoir,

    Je ne comprends plus très bien quel est ton code pour le drag&drop...
    Tu as résolu très vite ton premier problème finalement !

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 40
    Points : 10
    Points
    10
    Par défaut
    le code n'est pas de moi je l'ai pris sur le net
    peut-être n'est-ce pas là que je dois modifier le z-index de mes divs

  16. #16
    Membre confirmé 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
    Points : 551
    Points
    551
    Par défaut
    Je ne sais pas quel code tu utilise finalement, mais l'idée est de positionner le z-index le plus élevé sur le début du drag, et de le remettre à une valeur plus basse sur le drop.

    On peut positionner le z-index en javascript avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    elem.style.zIndex=2011;
    La meilleure solution est surement d'utiliser une classe CSS "par défaut" avec un z-index plus bas qu'une autre classe que tu applique sur le drag

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 40
    Points : 10
    Points
    10
    Par défaut
    ok je vais essayer ça
    merci !

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 40
    Points : 10
    Points
    10
    Par défaut
    voici ce que j'ai fais :

    j'ai placé le zIndex dans mon 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
     
    var dragobject={
    	x:0, y:0, offsetx:null,offsety:null,targetobj:null,dragapproved:0,
    	initialize:function(){
    		document.onmousedown=this.drag
    		document.onmouseup=function(){this.dragapproved=0;}}
     
    	,drag:function(e){
    		var evtobj=window.event? window.event:e
    		this.targetobj=window.event? event.srcElement:e.target
    		while (this.targetobj.className!="drag" && this.targetobj.tagName!="BODY") this.targetobj=this.targetobj.parentNode
    		if (this.targetobj.className=="drag"){
    			this.dragapproved=1;
    			this.targetobj.style.zIndex='999';
    			if (isNaN(parseInt(this.targetobj.style.left))){this.targetobj.style.left=0}
    			if (isNaN(parseInt(this.targetobj.style.top))){this.targetobj.style.top=0}
    			this.offsetx=parseInt(this.targetobj.style.left)
    			this.offsety=parseInt(this.targetobj.style.top)
    			this.x=evtobj.clientX
    			this.y=evtobj.clientY
    			if (evtobj.preventDefault) evtobj.preventDefault()
    			document.onmousemove=dragobject.moveit}}
     
    	,moveit:function(e){
    		var evtobj=window.event? window.event:e
    		if (this.dragapproved==1){
    			this.targetobj.style.left=this.offsetx+evtobj.clientX-this.x+"px"
    			this.targetobj.style.top=this.offsety+evtobj.clientY-this.y+"px"
    		return false}}
    }
    dragobject.initialize()
    }
     
    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;
    }

    et dans mon body :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <body onmousemove="drag(event);">
    <div id="img1" class="drag" onmousedown="beginDrag(this,event);" onmouseup="endDrag();"><a href="image.jpg" rel="lightbox" style="z-index:0;"></a></div>
    <div id="img2" class="drag" onmousedown="beginDrag(this,event);" onmouseup="endDrag();"><a href="image2.jpg" rel="lightbox" style="z-index:0;"></a></div>
    <script type="text/javascript">
    			positionne('img1', '290px', '84px');
    			positionne('img2', '140px', '310px');
    </script>
    </body>

    mais ça n'a pas l'air de marcher...

  19. #19
    Membre régulier Avatar de Billy KiT
    Inscrit en
    Mars 2011
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 66
    Points : 73
    Points
    73
    Par défaut
    Tant qu'à insister, autant aller jusqu'au bout !
    Voici donc ton code modifié qui fonctionne
    - Je clique sans déplacer, le lien s'ouvre
    - Je déplace, le lien ne s'ouvre pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html>
    <head>
    <style type="text/css">
    .drag {display:block;position:relative;border:0;}
    img {display:block}
    </style>
    </head>
    <script type="text/javascript" src="lightbox.js"></script>
    <script type="text/javascript">
    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;
    }
     
    /*-- pour calcul deplacement entre mousedown et mouseup --*/
    function sqr(a) { 
        return a*a; 
    } 
     
    function distance(x1, y1, x2, y2) { 
        return Math.sqrt(sqr(y2 - y1) + sqr(x2 - x1)); 
    } 
     
    function deplacement(p_id) {
    	x = parseInt(p_id.style.left);
    	y = parseInt(p_id.style.top);
    	return distance(x,y,posX,posY);
    }
    /*------*/
     
    var dragobject={
    	x:0, y:0, offsetx:null,offsety:null,targetobj:null,dragapproved:0,
    	initialize:function(){
    		document.onmousedown=this.drag;
    		document.onmouseup=function(){this.dragapproved=0; 
    			/*-- si le deplacement < 3 px ouvre lightbox --*/
    			if (deplacement(this.targetobj)<3) showLightbox(document.getElementById('monImage'));
    			/*------*/}}
    	,drag:function(e){
    		var evtobj=window.event? window.event:e
    		this.targetobj=window.event? event.srcElement:e.target
    		while (this.targetobj.className!="drag" && this.targetobj.tagName!="BODY") this.targetobj=this.targetobj.parentNode
    		if (this.targetobj.className=="drag"){
    			this.dragapproved=1
    			if (isNaN(parseInt(this.targetobj.style.left))){this.targetobj.style.left=0}
    			if (isNaN(parseInt(this.targetobj.style.top))){this.targetobj.style.top=0}
    			this.offsetx=parseInt(this.targetobj.style.left)
    			this.offsety=parseInt(this.targetobj.style.top)
    			this.x=evtobj.clientX
    			this.y=evtobj.clientY
    			if (evtobj.preventDefault) evtobj.preventDefault()
    			document.onmousemove=dragobject.moveit}
     
    			/*-- enregistre position au moment du mousedown --*/
    			posX = parseInt(this.targetobj.style.left);
    			posY = parseInt(this.targetobj.style.top);
    			/*------*/
    			}
    	,moveit:function(e){
    		var evtobj=window.event? window.event:e
    		if (this.dragapproved==1){
    			this.targetobj.style.left=this.offsetx+evtobj.clientX-this.x+"px"
    			this.targetobj.style.top=this.offsety+evtobj.clientY-this.y+"px"
    		return false}}
    }
    dragobject.initialize()
    </script>
    <body>
    <div id="idm" class="drag"><img src="98.jpg" width="70" height="99"/>
    <!-- astuce : l'image est sortie de la balise <a> -->
    <a href="image.jpg" rel="lightbox" id="monImage"></a>
    </div>
    <script type="text/javascript">
    	positionne('idm','290px','84px');
    </script>
    </body>
    </html>
    Têtu le bougre ....

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 40
    Points : 10
    Points
    10
    Par défaut
    Merci mais ce problème je l'ai résolu

    mon problème réside maintenant sur la gestion du zIndex que j'ai résolu en partie, voici ce que j'ai fais;

    Dans la fonction drag, appelée au début du déplacement, lorsque j'ai « attrapé » le container de class drag, j'ai modifié le zIndex :
    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
     
    var dragobject={
    	x:0, y:0, offsetx:null,offsety:null,targetobj:null,dragapproved:0,
    	initialize:function(){
    		document.onmousedown=this.drag
    		document.onmouseup=function(){this.dragapproved=0; this.targetobj.style.zIndex='90';}}//revenir à la valeur initiale en fin de deplacement
    	,drag:function(e){
    		var evtobj=window.event? window.event:e
    		this.targetobj=window.event? event.srcElement:e.target
    		while (this.targetobj.className!="drag" && this.targetobj.tagName!="BODY") this.targetobj=this.targetobj.parentNode
    		if (this.targetobj.className=="drag"){
    			this.dragapproved=1;
    			this.targetobj.style.zIndex='999';//ajout
    			if (isNaN(parseInt(this.targetobj.style.left))){this.targetobj.style.left=0}
    			if (isNaN(parseInt(this.targetobj.style.top))){this.targetobj.style.top=0}
    			this.offsetx=parseInt(this.targetobj.style.left)
    			this.offsety=parseInt(this.targetobj.style.top)
    			this.x=evtobj.clientX
    			this.y=evtobj.clientY
    			if (evtobj.preventDefault) evtobj.preventDefault()
    			document.onmousemove=dragobject.moveit}}
    mon soucis c'est que je ne parviens pas à "forcer" l'image à venir au premier plan lorsque l'on drope.
    Car dans cet exemple, une foi relâchée , celle-ci se repositionne en arrière plan

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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