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

Bibliothèques & Frameworks Discussion :

Drag and drop [script.aculo.us]


Sujet :

Bibliothèques & Frameworks

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut Drag and drop
    Salut à tous,

    je réalise actuellement un drag&drop avec prototype et scriptaculous mais je rencontre un petit problème.

    Le principe :
    J'ai une zone de reception dont l'id est "principal" qui va recevoir tous les objet qui aurot été déclaré comme draggable.
    Jusqu'ici pas de problème ca marche très bien.

    Mais j'ai besoin de généré ma zone de réception en javascript(elle peut être différente selon les cas).
    J'utilise donc quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $('cible').innerHTML = '<div id="principal"><div id="autre"></div></div>';
    pour modifier le contenu de ma page

    Or dès que ma zone de reception d'objet est généré par javascript plus moyen d'y glisser déposer quoi que ce soit.
    Ma zone créer en html au chargement de la page marche parfaitement mais si je recharge cette même zone en cliquant sur un lien ,donc par JS, ca ne marche plus.

    pour déclarer mon div en tant que zone de réception j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var products = document.getElementsByClassName('droppable');
    			for (var i = 0; i < products.length; i++) {
    				new Draggable(products[i].id, {ghosting:true, revert:true})	
    			}
    			Droppables.add('principal', {onDrop:addProduct})
    Si quelqu un à une idée
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  2. #2
    Expert confirmé

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Par défaut
    Citation Envoyé par grunk Voir le message
    Or dès que ma zone de reception d'objet est généré par javascript plus moyen d'y glisser déposer quoi que ce soit.
    Ma zone créer en html au chargement de la page marche parfaitement mais si je recharge cette même zone en cliquant sur un lien ,donc par JS, ca ne marche plus.
    Tu déclares bien tes Draggables et Droppables après avoir construit ta nouvelle div?

    Tu as essayé une insertion DOM plutot que innerHTML?

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Oui je déclare bien mes draggable et droppables après. Je vais essayer de changer le contenu avec Dom comme tu le conseil.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Me revoici, après quelques modifications.

    J'ai dans ma page un div :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <div id="dropzone" class="dropzone"></div>
    qui à pour but de recevoir mes images qui ont été déclarer comme élément draggable.

    J'ai également 3 lien qui font appel à la fonction JS suivante dont le but est de mettre à jour le contenu du div :

    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
    function affichCadre(type)
    {
    	var divHtml = $('dropzone');
    	if(type==1) // Fullscreen
    	{
    	divHtml.innerHTML = '';
    		var conteneur =  document.getElementById('dropzone');
    		var fullScreenDiv = document.createElement("div");
    		conteneur.appendChild(fullScreenDiv);
    		fullScreenDiv.setAttribute("id","principal");
    		fullScreenDiv.setAttribute("class","fullscreen");
    		//var fullscreen = '<div class="fullscreen" id="principal"></div>';
    		//divHtml.innerHTML = '';
     
    		var products = document.getElementsByClassName('droppable');
    		for (var i = 0; i < products.length; i++) {
    		new Draggable(products[i].id, {ghosting:true, revert:true})	
    		}
    		Droppables.add('principal', {onDrop:addProduct})
    	}
    	else if(type==2) // Horizontal
    	{
    	divHtml.innerHTML = '';
    		var conteneur =  document.getElementById('dropzone');
    		// Div fullscreen
    		var fullScreenDiv = document.createElement("div");
    		conteneur.appendChild(fullScreenDiv);
    		fullScreenDiv.setAttribute("id","principal");
    		fullScreenDiv.setAttribute("class","fullscreenH");
    		//Div horizontal
    		var horizontalDiv = document.createElement("div");
    		conteneur.appendChild(horizontalDiv);
    		horizontalDiv.setAttribute("id","bas");
    		horizontalDiv.setAttribute("class","horizontal");
    		//var horizontal = '<div class="fullscreenH" id="principal"></div><div class="horizontal" id="gauche"></div>';
    		//divHtml.innerHTML = horizontal;
     
    		var products = document.getElementsByClassName('droppable');
    		for (var i = 0; i < products.length; i++) {
    		new Draggable(products[i].id, {ghosting:true, revert:true})	
    		}
    		Droppables.add('principal', {onDrop:addProduct})
     
    		// Déclaration des entité glissable/deposable
    		var products = document.getElementsByClassName('droppable');
    		for (var i = 0; i < products.length; i++) {
    			new Draggable(products[i].id, {ghosting:true, revert:true})	
    		}
    		Droppables.add('bas', {onDrop:addProduct})
    	}
    	else if(type==3) //Vertical
    	{
    		divHtml.innerHTML = '';
    		var conteneur =  document.getElementById('dropzone');
     
    		//Cadre gauche
    		var cadreGauche = document.createElement("div");
    		conteneur.appendChild(cadreGauche);
    		cadreGauche.setAttribute("class","cadreLeft");
     
    			//Div vertical
    			var verticalDiv = document.createElement("div");
    			cadreGauche.appendChild(verticalDiv);
    			verticalDiv.setAttribute("class","vertical");
    			verticalDiv.setAttribute("id","gauche");
     
    		//cadre droit
    		var cadreDroit = document.createElement("div");
    		conteneur.appendChild(cadreDroit);
    		cadreDroit.setAttribute("class","cadreDroit");
     
    			//div principal
    			var principalDiv = document.createElement("div");
    			cadreDroit.appendChild(principalDiv);
    			principalDiv.setAttribute("class","fullscreenV");
    			principalDiv.setAttribute("id","principal");
     
    		//var vertical = '<div class="cadreLeft"><div class="vertical" id="gauche" ></div></div><div class="cadreDroit"><div class="fullscreenV" id="principal"></div></div>';
    		//divHtml.innerHTML = vertical;
     
    		var products = document.getElementsByClassName('droppable');
    		for (var i = 0; i < products.length; i++) {
    		new Draggable(products[i].id, {ghosting:true, revert:true})	
    		}
    		Droppables.add('principal', {onDrop:addProduct})
     
    		var products = document.getElementsByClassName('droppable');
    		for (var i = 0; i < products.length; i++) {
    			new Draggable(products[i].id, {ghosting:true, revert:true})	
    		}
    		Droppables.add('gauche', {onDrop:addProduct})
    	}
    }
    Celà permet de créer un carré avec divers partie pouvant recevoir des éléments : http://img73.imageshack.us/img73/6858/boxjr2.gif

    Sous FF et opéra pas de soucis ca marche très bien. En revanche sous Internet explorer absolument rien ne s'affiche. Je click sur le premier lien pour générer un carré plein écran par exemple mais il n'apparait pas. En revanche je peux déplacer mes objet (preuve donc que le drag and drop a bien été instancié).
    Si je reclic sur un lien par contre le drag and drop ne marche plus et ce définitivement. Comme si le fait de redéclarer des drag and drop bloquait le tout

    Si vous avez des idées , pour dans un premier temps arriver à afficher quelques choses sous ie puis pour le drag and drop ^^
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4
    Par défaut
    salut, j'ai peut être ta solution : j'avais à peu près le même problème que toi sur un projet de gestion d'une arborescence de fichiers ou l'utilisateur pouvait déplacer ses dossiers etc en drag and drop. Suite à un premier déplacement , j'effectuais mon script serveur en ajax pour mettre à jour la base de données et réecrivais ma balise script avec les nouveaux élements en drag mais apres une premiere requete,je ne pouvais plus déplacer mes fichiers.

    Solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var codejs = routine qui génère ton code javascript;
    var ScriptObject = document.getElementById(tonIdDeLaBaliseScript);
    ScriptObject.innerHTML = eval(codejs);
    La fonction eval est destinée a interpréter n'importe quelle chaine de caractères comme un code javascript...

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

Discussions similaires

  1. Drag and drop "de l'extérieur"
    Par Invité dans le forum C++Builder
    Réponses: 12
    Dernier message: 31/03/2020, 10h10
  2. "Drag and drop" avec directinput
    Par batosai dans le forum DirectX
    Réponses: 1
    Dernier message: 16/06/2004, 16h48
  3. [VB.NET] Microsoft TreeView drag and drop ?
    Par bigtoof dans le forum ASP.NET
    Réponses: 7
    Dernier message: 24/05/2004, 14h50
  4. [JSP][DRAG AND DROP]
    Par hamed dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 23/01/2004, 17h36
  5. drag and drop
    Par jujuesteban dans le forum Composants VCL
    Réponses: 5
    Dernier message: 20/06/2003, 09h23

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