Je dois être capable de déplacer un div avec ma souris et de stocker le nouveau pos de la div dans la base de données pour me souvenir de l'affichage. Comment puis-je le faire?Comment déplacer div avec la souris en utilisant jquery?
Répondre
Je vous recommande fortement de regarder dans jQuery UI et l'interaction draggable. En gros, vous voulez ajouter le code à votre draggable div (en supposant qu'il a id = « draggable »):
$("#draggable").draggable();
Et puis mettre votre comportement nécessaire en cas d'arrêt. Plus précisément, vous feriez ceci:
$('#draggable').draggable({
stop: function(event, ui) { ... }
});
En ce qui concerne le stockage de base de données, vous pouvez utiliser un appel AJAX dans la fonction ci-dessus, ou vous pouvez le stocker en page, par exemple qu'une certaine forme-envoyer ou autre L'action aboutit à ce que les informations de position soient transmises au serveur et stockées en ligne avec d'autres données. Je serais prudent avec un appel AJAX, car vous pouvez bombarder votre db avec des données de position à chaque glisser sur chaque navigateur. Dépend de votre application ...
Voici une petite fonction jQuery que je viens d'écrire pour vous permettre de faire glisser des divs en utilisant uniquement jQuery sans utiliser l'interface utilisateur jQuery.
/* PlugTrade.com - jQuery draggit Function */
/* Drag A Div with jQuery */
jQuery.fn.draggit = function (el) {
var thisdiv = this;
var thistarget = $(el);
var relX;
var relY;
var targetw = thistarget.width();
var targeth = thistarget.height();
var docw;
var doch;
thistarget.css('position','absolute');
thisdiv.bind('mousedown', function(e){
var pos = $(el).offset();
var srcX = pos.left;
var srcY = pos.top;
docw = $('body').width();
doch = $('body').height();
relX = e.pageX - srcX;
relY = e.pageY - srcY;
ismousedown = true;
});
$(document).bind('mousemove',function(e){
if(ismousedown)
{
targetw = thistarget.width();
targeth = thistarget.height();
var maxX = docw - targetw - 10;
var maxY = doch - targeth - 10;
var mouseX = e.pageX;
var mouseY = e.pageY;
var diffX = mouseX - relX;
var diffY = mouseY - relY;
// check if we are beyond document bounds ...
if(diffX < 0) diffX = 0;
if(diffY < 0) diffY = 0;
if(diffX > maxX) diffX = maxX;
if(diffY > maxY) diffY = maxY;
$(el).css('top', (diffY)+'px');
$(el).css('left', (diffX)+'px');
}
});
$(window).bind('mouseup', function(e){
ismousedown = false;
});
return this;
} // end jQuery draggit function //
La fonction jQuery empêche même le div de sortir des limites. Fondamentalement, vous l'attachez à un div que vous destinez à être l'activateur de drag (disons la barre de titre par exemple). Il est aussi l'invocation simple que cela:
$("#titleBar").draggit("#whatToDrag");
DonC#titleBar serait l'id de votre barre de titre div et #whatToDrag serait l'id de ce que vous vouliez faire glisser. Je m'excuse pour le code désordonné, je l'ai juste piraté et je pensais qu'il vous donnerait une alternative à l'interface utilisateur de jQuery, tout en le rendant facile à mettre en œuvre.
doch devrait utiliser $ (window) .height() plutôt que $ ('body') car le corps est seulement aussi grand que le contenu qui le remplit, peut-être pas toute la fenêtre. Ou peut-être utiliser le corps si le corps est plus haut que la fenêtre, si vous voulez en quelque sorte mettre le draggit sous la vue de la fenêtre. Mais juste génial quand même! – Alendri
Exactement ce que je cherchais. En plus de ce que @Alendri a dit, 'thistarget.width()' et 'thistarget.height()' devraient utiliser 'outerWidth()' et 'outerHeight()' à la place pour compenser le bourrage de la cible. – Jeff
S'il y a beaucoup d'objets, alors le mousemove peut devenir cher. Une étape vers la résolution est de lier le gestionnaire sur mousedown et de le désengager sur mouseup. Cet exemple n'a pas été écrit et testé avec plusieurs objets cependant; en particulier, la déliaison courante délie tout ce qui était lié auparavant (il peut être résolu en nommant l'expression lambda et en se référant à ce nom dans unbind).
jQuery.fn.dragdrop = function (el) {
this.bind('mousedown', function (e) {
var relX = e.pageX - $(el).offset().left;
var relY = e.pageY - $(el).offset().top;
var maxX = $('body').width() - $(el).width() - 10;
var maxY = $('body').height() - $(el).height() - 10;
$(document).bind('mousemove', function (e) {
var diffX = Math.min(maxX, Math.max(0, e.pageX - relX));
var diffY = Math.min(maxY, Math.max(0, e.pageY - relY));
$(el).css('left', diffX + 'px').css('top', diffY + 'px');
});
});
$(window).bind('mouseup', function (e) {
$(document).unbind('mousemove');
});
return this;
};
$(document).ready(function() {
return $('#obj').dragdrop('#obj');
});
Ou dans parenscript:
(setf (chain j-query fn dragdrop)
(lambda (el)
(chain this
(bind :mousedown
(lambda (e)
(let ((rel-x (- (chain e page-x) (chain ($ el) (offset) left)))
(rel-y (- (chain e page-y) (chain ($ el) (offset) top)))
(max-x (- (chain ($ :body) (width)) (chain ($ el) (width)) 10))
(max-y (- (chain ($ :body) (height)) (chain ($ el) (height)) 10)))
(chain ($ document)
(bind :mousemove
(lambda (e)
(let ((diff-x (min max-x (max 0 (- (chain e page-x) rel-x))))
(diff-y (min max-y (max 0 (- (chain e page-y) rel-y)))))
(chain ($ el) (css :left (+ diff-x :px)) (css :top (+ diff-y :px)))))))))))
(chain ($ window)
(bind :mouseup
(lambda (e)
(chain ($ document)
(unbind :mousemove)))))
this))
- 1. OpenGL - déplacer la caméra avec la souris
- 2. jquery popup en utilisant div
- 3. Comment faire pour déplacer l'info-bulle avec la souris?
- 4. souris dessus/souris Out sur DIV
- 5. Créer une div contenant div cible en utilisant jQuery
- 6. Comment mettre en surbrillance div en utilisant javascript ou jquery
- 7. Comment sélectionner un objet survolé de la souris avec JQuery?
- 8. Obtenir la classe (s) d'un div en utilisant jquery
- 9. détecter la souris Déplacer l'événement sur JPanel
- 10. Comment ajouter dynamiquement un div en utilisant JQuery?
- 11. Comment puis-je conserver la barre de défilement d'une div au bas de la div en utilisant jQuery?
- 12. impossible d'entrer la souris dans pop div
- 13. jQuery en utilisant append avec des effets
- 14. Réorganisation de la hiérarchie div avec jquery
- 15. Besoin d'aide avec jQuery Div Div
- 16. Comment déplacer un élément avec un élément de script sans ré-exécuter un script avec jQuery?
- 17. Comment puis-je utiliser jQuery pour déplacer un div à travers l'écran?
- 18. enfant Count éléments div immédiats en utilisant jQuery
- 19. Contrôle de la souris en utilisant wii nunchuck
- 20. Comment recharger un div avec une vue partielle dans ASP.NET MVC en utilisant jQuery?
- 21. div diapositive en utilisant javascript et html
- 22. Réglage div image de fond en utilisant JQuery
- 23. auto-refresh div avec jquery
- 24. Comment estomper un div avec jQuery?
- 25. Comment valider un formulaire avec plusieurs div en utilisant jQuery Validate plugin?
- 26. vertical align div dans un div utilisant jquery?
- 27. en utilisant JS pour verrouiller un div
- 28. Mise à jour Div XML en utilisant Jquery
- 29. JQuery, comment trouver la liste des DIV avec ID similaire
- 30. Permutation contenu div avec jQuery
Eh oui, c'est le meilleur choix si vous ne voulez pas gâcher avec des tests de navigateurs et tous les craps. +1 de moi;) –