Exemples
Drag & Drop simple
Voici comment faire un drag&drop simple au sein d'un même arbre
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 |
---|
| var tree1 = null; | | | | | | | | | | function funcDrop1 (move, drop, finished) { | if (!finished) { | if (confirm('Tu confirmes le drop ?')) { | return true; | } else { | return false; | } | } else { | alert ('Le drop est effectué'); | } | } | | | | | function TafelTreeInit () { | tree1 = new TafelTree ('drag1', struct1, { | 'generate' : true, | 'imgBase' : 'imgs/', | 'defaultImg' : 'page.gif', | 'defaultImgOpen' : 'folderopen.gif', | 'defaultImgClose' : 'folder.gif', | 'onDrop' : funcDrop1, | 'behaviourDrop' : 'child', | | 'dropALT' : true, | 'dropCTRL' : true | }); | } | |
|
Drag & Drop simple entre deux arbres
Il est possible de faire des drag&drop entre deux ou plusieurs arbres. Voici un exemple basique d'un échange entre deux arbres
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 |
---|
| | | | function funcDrop2 (move, drop, finished) { | | if (finished) { | var _drag = move.getText(); | var _drop = drop.getText(); | var _treeMove = move.tree.id; | var _treeDrop = drop.tree.id; | alert ('Droppé ' + _drag + ' (' + _treeMove + ') sur ' | + _drop + ' ('+ _treeDrop + ')'); | } | | | return true; | } | | | | | | function TafelTreeInit () { | tree1b = new TafelTree ('drag1b', struct1, { | 'generate' : true, | 'imgBase' : 'imgs/', | 'defaultImg' : 'page.gif', | 'defaultImgOpen' : 'folderopen.gif', | 'defaultImgClose' : 'folder.gif', | 'onDrop' : funcDrop2 | }); | tree2 = new TafelTree ('drag2', struct2, { | 'generate' : true, | 'rtlMode' : true, | 'imgBase' : 'imgs/', | 'defaultImg' : 'globe.gif', | 'defaultImgOpen' : 'imgfolder.gif', | 'defaultImgClose' : 'folder.gif', | 'onDrop' : funcDrop2, | 'bind' : [tree1] | }); | } | |
|
Drag & Drop en copie
On peut faire des drag&drop où la branche est copiée (et non déplacée). Par défaut, il faut appuyer sur CTRL au moment du drop. On peut aussi setter le copyDrag comme comportement par défaut grâce à setBehaviourDrop(). Dans l'exemple ci-dessous, on va manipuler une branche copiée suite à un drag&drop.
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 |
---|
| | | | function funcDropCopy (move, drop, finished, copy) { | | | if (finished) { | if (copy) { | | | copy.setText(move.getText() + " copiée"); | } | } | return true; | } | | | | | | function TafelTreeInit () { | treeCopy = new TafelTree ("dragCopy", structCopy, { | "generate" : true, | "imgBase" : "imgs/", | "defaultImg" : "page.gif", | "defaultImgOpen" : "folderopen.gif", | "defaultImgClose" : "folder.gif", | "onDrop" : funcDropCopy, | "behaviourDrop" : "childcopy" | }); | } | |
|
Drag & Drop Ajax 1
Le drag&drop ajax intègre nativement la gestion des réponses serveurs. Très utile notamment pour valider un drop de manière complexe (nécessitant des requêtes sur une base de données, par exemple)
Ci-dessous le fichier PHP
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 |
---|
| <?php | | $okDrop = false; | $msg = 'Erreur dans POST'; | | | | | | | | | | | | if (isset($_POST['drop'])) { | | | | | | $dragID = $_POST['drag_id']; | $dropID = $_POST['drop_id']; | | | | if (!$_POST['sibling']){ | | | $okDrop = true; | $msg = 'Tout est ok'; | } else { | | | $okDrop = false; | $msg = 'On ne drop pas comme soeur!'; | } | } | | | | | | | if ($okDrop) { | echo "({"; | echo "'ok' : true,"; | echo "'msg' : '".$msg."'"; | echo "})"; | } else { | echo "({"; | echo "'ok' : false,"; | echo "'msg' : '".$msg."'"; | echo "})"; | } | | ?> | |
|
Puis le code Javascript
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 |
---|
| | function funcDrop3 (move, drop, response, finished) { | | | if (!finished) { | | | var obj = eval(response); | if (!obj.ok) { | alert ('Problème : ' + obj.msg); | return false; | } | } | return true; | } | | | | | function TafelTreeInit () { | tree3 = new TafelTree ('drag3', struct3, { | 'generate' : true, | 'imgBase' : 'imgs/', | 'defaultImg' : 'page.gif', | 'defaultImgOpen' : 'folderopen.gif', | 'defaultImgClose' : 'folder.gif', | 'onDropAjax' : [funcDrop3, 'server/sampleDrop1.php'] | }); | } | |
|
Essaie maintenant de faire un drag&drop en gardant ALT appuyé... Surprise ? N'y aurait-il pas, par hasard, une alert te signigiant qu'il y a un problème ? Espérons-le, sinon ça veut dire que mon arbre marche pô...
A noter que dans cet exemple, il aurait suffit d'ajouter "dropALT : false" dans le constructeur de l'arbre pour faire la même chose. Disons que c'était juste pou l'exemple, quoi.