2017-08-28 1 views
1

J'ai récupéré des conteneurs et je souhaite manipuler le DOM en insérant le conteneur déplacé avant le conteneur, le conteneur glissé est déplacé.Jquery Glisser-déposer - insérer le conteneur div glissé avant l'autre conteneur

moyens ... Ce est le placement actuel

Default

Maintenant, je veux placer le récipient rouge avant le vert un

Insert

et il regardera ce

Desired

Note importante: Je sais qu'il y a l'interface utilisateur Jquery et c'est vraiment facile à utiliser, mais je ne peux pas l'utiliser.

Donc je sais que je peux utiliser les fonctions jquery .insertBefore() et .insertAfter() mais je suis aux prises avec les drag-events.

Voici un petit exemple montrant mon travail actuel

$(document).ready(function() { // add the events to the containers 
 
    addDragDropToElement("divRed"); 
 
    addDragDropToElement("divBlue"); 
 
    addDragDropToElement("divGreen"); 
 
    addDragDropToElement("divYellow"); 
 
}); 
 

 
function addDragDropToElement(element) { 
 
    var ele = $("#" + element); 
 
    
 
    ele.prop("draggable", true); // make the div draggable 
 

 
    ele.on('dragstart', function() { 
 
     startDragging(event); 
 
    }); 
 

 
    ele.on('dragenter', function() { 
 
     enterDragging(event); 
 
    }); 
 

 
    ele.on('dragover', function() { 
 
     dragOver(event); 
 
    }); 
 

 
    ele.on('dragleave', function() { 
 
     leaveDragging(event); 
 
    }); 
 

 
    ele.on('drop', function() { 
 
     dropElement(event); 
 
    }); 
 

 
    ele.on('dragend', function() { 
 
     stopDragging(event); 
 
    }); 
 
} 
 

 
    var draggedElement = null; 
 

 
function startDragging(e) { 
 
    draggedElement = e.target; 
 
} 
 

 
function enterDragging(e) { 
 

 
} 
 

 
function dragOver(e) { 
 
    e.preventDefault(); 
 
} 
 

 
function leaveDragging(e) { 
 

 
} 
 

 
function dropElement(e) { 
 
    e.preventDefault(); 
 
    var targetElement = e.target; 
 

 
    $(draggedElement).insertBefore(targetElement); 
 
} 
 

 
function stopDragging(e) { 
 

 
}
#divRed{background:red;} 
 
#divBlue{background:blue;} 
 
#divGreen{background:green;} 
 
#divYellow{background:yellow;} 
 

 
.container{ 
 
    width: 50px; 
 
    height: 50px; 
 
    display: inline-block; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<div class="container" id="divRed"></div> 
 
<div class="container" id="divBlue"></div> 
 
<div class="container" id="divGreen"></div> 
 
<div class="container" id="divYellow"></div>

Est-ce que l'esprit de quelqu'un me aider à remplir les fonctions d'événements vides ci-dessous?

+0

Je pense que son chemin mieux si vous y parvenir par vos propres, si nous faisons le travail pour vous, vous apprenez l'habitude de quoi que ce soit. Ce https://wiki.selfhtml.org/wiki/JavaScript/Drag_%26_Drop explique très bien mais il ya des milliers de tutoriels là-bas – Doomenik

+0

@Doomenik J'ai mis à jour mon post, cela ressemble à un drag & drop valide, non? – peterHasemann

+0

On dirait bien :) Agréable fait – Doomenik

Répondre

2

Donc, j'ai finalement compris. Si quelqu'un veut savoir, comment cela fonctionne: prendre ce violon

$(document).ready(function() { 
 
    addDragDropToElement("divRed"); 
 
    addDragDropToElement("divBlue"); 
 
    addDragDropToElement("divGreen"); 
 
    addDragDropToElement("divYellow"); 
 
}); 
 

 
function addDragDropToElement(element) { 
 
    var ele = $("#" + element); 
 
    
 
    ele.prop("draggable", true); 
 

 
    ele.on('dragstart', function() { 
 
     startDragging(event); 
 
    }); 
 

 
    ele.on('dragover', function() { 
 
     dragOver(event); 
 
    }); 
 

 
    ele.on('drop', function() { 
 
     dropElement(event); 
 
    }); 
 
} 
 

 
var draggedElement = null; // the element that is dragged 
 

 
function startDragging(e) { 
 
    draggedElement = e.target; // store the dragged element 
 
} 
 

 
function dragOver(e) { 
 
    e.preventDefault(); 
 
} 
 

 
function dropElement(e) { 
 
    e.preventDefault(); 
 
    var targetElement = e.target; // the element under the dragged element 
 

 
    $(draggedElement).insertBefore(targetElement); // place the dragged element before the other element 
 
}
#divRed{background:red;} 
 
#divBlue{background:blue;} 
 
#divGreen{background:green;} 
 
#divYellow{background:yellow;} 
 

 
.container{ 
 
    width: 50px; 
 
    height: 50px; 
 
    display: inline-block; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<div class="container" id="divRed"></div> 
 
<div class="container" id="divBlue"></div> 
 
<div class="container" id="divGreen"></div> 
 
<div class="container" id="divYellow"></div>