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 :

Drag Drop limité avec images


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    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 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 659
    Billets dans le blog
    1
    Par défaut Drag Drop limité avec images
    j'essayais d'adapter le code pour placer des points sur une carte...

    pour simplifier j'ai remplacer le div draggable par une image
    curieusement ça n'a pas l'air de vouloir focntionner, mais je ne comprends pas pourquoi...
    Je suis obliger de mettre l'image dans un div draggable
    Quelqu'un pourrait me dire pourquoi ???

    voici ce qui fonctionnne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <div id="titi" style="width:433px;height:440px;border:1px solid #666; background:url('../GrY/Site/Carte.png') 0 0 no-repeat">
    <div id="debug" style="position:absolute" class="Draggable" ><img src="../GrY/Site/BlueDot.gif" /></div>
    et ce qui ne fonctionne pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <div id="titi" style="width:433px;height:440px;border:1px solid #666; background:url('../GrY/Site/Carte.png') 0 0 no-repeat">
    <img src="../GrY/Site/BlueDot.gif"  id="debug" style="position:absolute" class="Draggable"/>
    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 !

  2. #2
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Par défaut
    voici une source qui devait servir a créer des tag sur une image , au final :

    - une div ( dans la quelle tu peux mettre une image de background )
    - création de div avec redimensionnement dynamique

    adaptation a faire :

    - supprimer la fonctionne de redimenssionement de la div crée dynamiquement
    - supprimer la fonction permettant de créer le input info

    - créer une fonction qui t'ajoute un point ( image) a l'endroit clické

    tu va voir que tout le code est déja prèt et simple a adapter
    Fichiers attachés Fichiers attachés

  3. #3
    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 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 659
    Billets dans le blog
    1
    Par défaut
    Oui ok bien ton truc merci
    mais bon ça ne repond pas à ma question ...
    pourquoi avec le code précédent ne peut on pas dragger une image alors que pour le div cela fonctionne, le script ne fait pourtant pas appel à des propriété du div qui ne sont pas applicables aux images


    Le code complet largement insipiré du script de contribution:

    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
    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
    141
    142
    143
    144
    145
    146
    147
    148
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>Fiche Agence</title>
     
    <style type="text/css">
    .Draggable{
    	/*border:1px solid #666;*/
    	/*background-color:#4C9294;*/
    }
    .inDrag{
    	border:2px dashed #ED3C12;
    	/*background-color:#4395BC;*/
    }
    </style>
    <script type="text/javascript">
    var Drag = {
     
    	MyObj : null,
    	MyObjToLimit : null,
     
    	init : function(o,MyObjToLimit)
    	{
    		Drag.MyObj = o ;
    		//Sauvegarde de la classe d'origine de l'objet
    		Drag.MyObj.MyClassName = o.className;
    		//On vérifit si l'objet est limité a un autre objet
    		Drag.MyObj.MyObjToLimit = (MyObjToLimit != null) ? MyObjToLimit:null;
    		//On assigne la méthode au click de la souris sur l'MyObjet
    		Drag.MyObj.onmousedown	= Drag.start;
     
    		//Si l'élément n'as pas de propriété let et top on lui en assigne par défault
    		if (isNaN(parseInt(Drag.MyObj.style.left  ))) Drag.MyObj.style.left   = "0px";
    		if (isNaN(parseInt(Drag.MyObj.style.top   ))) Drag.MyObj.style.top    = "0px";
     
    		//Si l'on doit limiter le déplacement a une zone on calcul les points
    		if(Drag.MyObj.MyObjToLimit){
    				Drag.MyObj.minLeft = Drag.findPos(Drag.MyObj.MyObjToLimit)[0] ;
    				Drag.MyObj.maxRight = Drag.MyObj.minLeft + Drag.MyObj.MyObjToLimit.offsetWidth ;
    				Drag.MyObj.minTop = Drag.findPos(Drag.MyObj.MyObjToLimit)[1] ;
    				Drag.MyObj.maxBottom = Drag.MyObj.minTop+Drag.MyObj.MyObjToLimit.offsetHeight;
    		}
     
    	},
     
    	start : function(e)
    	{
    		Drag.MyObj = this;
    		//On récupère l'évènement , bug sous ie on doit redéclarer l'évènement
    		e = Drag.GetEvent(e);
    		//On affecte la classe InDrag
    		Drag.MyObj.className = "inDrag";
    		//On récupère l'endroit ou se trouve la souris par rapport a l'objet clické
    		Drag.MyObj.ecartX = e.clientX - parseInt(Drag.MyObj.style.left);
    		Drag.MyObj.ecartY = e.clientY - parseInt(Drag.MyObj.style.top);
    		//On affecte les méthodes drag et end au évènement lié au document et non a l'MyObjet
    		document.onmousemove	= Drag.drag;
    		document.onmouseup		= Drag.end;
     
    		return false;
    	},
     
    	drag : function(e)
    	{
    		//On récupère l'évènement , bug sous ie on doit redéclarer l'évènement
    		e = Drag.GetEvent(e);
    		//Récupération de la position de la souris
    		var curX = e.clientX;
    		var curY = e.clientY;
     
    		var newPosX = curX - Drag.MyObj.ecartX;
    		var newPosY = curY - Drag.MyObj.ecartY;
     
    		//Si l'élément les limités a  un conteneur
    		if(Drag.MyObj.MyObjToLimit != null){
    			//Déplacement de l'objet
    			if(newPosX < (Drag.MyObj.minLeft)){
    				Drag.MyObj.style.left = Drag.MyObj.minLeft + "px";
    			}
    			else if((newPosX + Drag.MyObj.offsetWidth) > (Drag.MyObj.maxRight)){
    				Drag.MyObj.style.left = Drag.MyObj.maxRight - Drag.MyObj.offsetWidth  + "px";
    			}
    			else{
    				Drag.MyObj.style.left = newPosX + 'px';
    			}
     
     
    			if(newPosY < (Drag.MyObj.minTop)){
    				Drag.MyObj.style.top = Drag.MyObj.minTop + 'px';
    			}
    			else if((newPosY + Drag.MyObj.offsetHeight) > (Drag.MyObj.maxBottom)){
    				Drag.MyObj.style.top = Drag.MyObj.maxBottom - Drag.MyObj.offsetHeight +"px";
    			}
    			else{
    				Drag.MyObj.style.top = newPosY + 'px';
    			}
    		}
    		//Sinon déplacement normalement
    		else{
    			Drag.MyObj.style.top = newPosY + 'px';
    			Drag.MyObj.style.left = newPosX + 'px';
    		}
     
    		return false;
    	},
     
    	end : function()
    	{
    		//On remet la classe de l'objet
    		Drag.MyObj.className = Drag.MyObj.MyClassName;
    		//On supprime les évènements liés au déplacement :)
    		document.onmousemove = null;
    		document.onmouseup   = null;
    		//On détruit l'MyObjet
    		Drag.MyObj = null;
    	},
     
    	GetEvent : function(e)
    	{
    		if (!e) e = window.event;
    		return e;
    	},
    	findPos : function(obj){
    		//position x / y de l'objet
    	    var x = obj.offsetLeft || 0;
    	    var y = obj.offsetTop || 0;
    		//tant qu'il y a un parent, on ajoute la position de son parent
    	    while (obj = obj.offsetParent) {
    	        x += obj.offsetLeft
    	        y += obj.offsetTop
    	    }
    		//Ici on retour x ou y ( ou les deux dans un tableau ou un hash
    	    return new Array(x,y);
    	}
    };
    </script>
    </head>
    <body>
     <div id="titi" style="width:433px;height:440px;border:1px solid #666; background:url('../GrY/Site/Carte.png') 0 0 no-repeat">
    <img  id="debug" style="position:absolute" class="Draggable" src="../GrY/Site/BlueDot.gif" />
    </div>
     
    <script type="text/javascript">
    	Drag.init(document.getElementById('debug'),document.getElementById('titi'));
    </script>
    </body>
    </html>
    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 !

  4. #4
    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 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 659
    Billets dans le blog
    1
    Par défaut
    Heu désolé ...

    Laissez tomber ... je ne sais pas pourquoi, j'ai du changer un truc par mégarde mais là ça fonctionne au poil !

    Merci d'avoir perdu de votre temps

    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 !

  5. #5
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Par défaut
    lol pas grave, mais je pense que le script que je t'ai donné pourra te servir

  6. #6
    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 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 659
    Billets dans le blog
    1
    Par défaut
    Oui sans doute si mon pojet de portail intranet voit le jour

    Merci FIllot
    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 !

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

Discussions similaires

  1. [HTML 5] Drag & Drop d'une image sous Firefox
    Par Isiker dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 09/02/2012, 17h38
  2. Drag and drop (JLabel avec image )
    Par chrass dans le forum Interfaces Graphiques en Java
    Réponses: 0
    Dernier message: 06/02/2010, 16h54
  3. [AJAX] Drag & drop: ordre d'images
    Par GTJuanpablo dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 11/07/2007, 13h02
  4. Drag & drop sur les images sous FF
    Par moumoune65 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 14/06/2007, 14h10
  5. Réponses: 6
    Dernier message: 30/09/2006, 12h58

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