J'ai fait quelque chose il y a quelques semaines pour similaires angulaire, see here. Cela pourrait peut-être vous aider un peu. Fondamentalement, je voulais faire quelque chose que vous pensez probablement faire, mais pour utiliser les événements de glisser vous devez également déposer les éléments que vous faites glisser (du moins c'est ce que j'ai fini par chercher). Donc, si vous voulez juste faire glisser/déplacer les éléments, vous devez être en mesure de définir leur position sur la page en utilisant top
, bottom
et left
, right
styles. Donc, vous ces éléments doivent avoir la position fixed
ou absolute
idéalement.
Ensuite, vous allez pour le noyau de ceci, qui est de calculer le vecteur que vous allez déplacer l'élément avec. Étant donné que l'événement mousemove
distribue uniquement les MouseEvent
qui vous permettent d'accéder aux coordonnées de la souris, vous pouvez compter dans quel vecteur votre souris s'est déplacée et déplacer l'élément par le même vecteur.
En fait ce que je faisais était (espérons qu'il est compréhensible dans ES5):
var elementPosition = [0,0];
var mousePosition = [0,0];
var element = document.getElementById('yourElement');
var mainEH = function (event) {
mousePosition = [event.clientX, event.clientY];
document.addEventListener('mousemove', calcEH);
document.addEventListener('mouseup', removeHandlers);
document.addEventListener('contextmenu', removeHandlers);
};
var calcEH = function (event) {
var vector = [-mousePosition[0] + event.clientX, -mousePosition[1] + event.clientY];
mousePosition = [mousePosition[0] + vector[0], mousePosition[1] + vector[1]];
elementPosition = [elementPosition[0] + vector[0], elementPosition[1] + vector[1]];
updatePosition();
};
var removeHandlers = function() {
document.removeEventListener('mousemove', calcEH);
document.removeEventListener('mouseup', removeHandlers);
document.removeEventListener('contextmenu', removeHandlers);
};
function updatePosition() {
element.style.left = elementPosition[0] + "px";
element.style.top = elementPosition[1] + "px";
}
element.addEventListener('mousedown', mainEH, true);
Je ne sais pas si ce code exact fonctionne comme je ne peux pas tester maintenant, mais vous pouvez voir here comment je l'ai cela en utilisant angulaire. J'espère que ça marchera très bien pour vous. Au moins, vous avez l'idée. Quoi qu'il en soit, vous devrez peut-être exécuter une fonction qui définit la position initiale de l'élément pour vous.
MISE À JOUR
Je viens juste de réaliser que ce n'est pas exactement ce que vous cherchez. Si je vous ai bien compris, vous voulez déplacer tout l'élément en le faisant glisser. Cependant, je vais probablement laisser la réponse ici parce que la solution pourrait être assez similaire. Je le ferais probablement en utilisant la logique que j'ai posté auparavant et pour être en mesure de déplacer l'élément je définirais sa position à absolu pendant que l'événement mousemove est déclenché, puis sur mouseup vous pouvez supprimer l'attribut absolu de position.
Il semblerait que le problème ait été résolu dans 'jquery.sortable'. Regarde comment ça fonctionne. –
Eh bien, j'apprécierais une réponse réelle, si vous êtes capable. J'ai regardé triable, mais ne vois rien qui ressemble à attribuer une position d'élément - même si je me rends compte qu'il doit être inféré quelque part. Toutes mes excuses, je ne suis pas très familier avec jquery. –
pour certaines raisons je ne considère pas SO comme un service de générateur de code. –