Necesito poder mover un div con mi mouse y almacenar la nueva posición del div en la base de datos para recordar la pantalla. ¿Cómo puedo hacerlo?Cómo mover div con el mouse usando jquery?
Respuesta
Recomiendo encarecidamente que consulte jQuery UI y la interacción que se puede arrastrar. Básicamente, tendrá que añadir el código a su div arrastrable (suponiendo que tiene id = "arrastrable"):
$("#draggable").draggable();
Y, a continuación, poner su comportamiento necesario en caso de parada. Más específicamente, haría esto:
$('#draggable').draggable({
stop: function(event, ui) { ... }
});
En cuanto al almacenamiento de base de datos, se puede utilizar una llamada AJAX en la función anterior, o se puede almacenar en páginas, de tal manera que de alguna forma u otra a enviar acción da como resultado que la información posicional se pase al servidor y se almacene en línea con otros datos. Tendría cuidado con una llamada AJAX, ya que puede bombardear su base de datos de posición con cada arrastre en cada navegador. Depende de su aplicación ...
Aquí hay una pequeña función jQuery que acabo de escribir para permitirle arrastrar divs usando solo jQuery y no usando jQuery UI.
/* 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 función jQuery incluso evita que el div se salga de los límites. Básicamente lo adjuntamos a un div que usted destina a ser el activador de arrastre (por ejemplo, la barra de título). La invocación es tan simple como esto:
$("#titleBar").draggit("#whatToDrag");
Así #titleBar sería el ID de su div barra de título y #whatToDrag sería la identificación de lo que quería arrastrar. Me disculpo por el código desordenado, simplemente lo pirateé y pensé que le daría una alternativa a la interfaz de usuario de jQuery, al mismo tiempo que lo haría fácil de implementar.
doch debería usar $ (ventana) .height() en lugar de $ ('cuerpo') ya que el cuerpo solo es tan alto como el contenido que lo llena, tal vez no toda la ventana. O tal vez use el cuerpo si el cuerpo está más alto que la ventana, si de alguna manera desea colocar el draggit debajo de la vista de la ventana. Pero simplemente increíble de todos modos! – Alendri
Exactamente lo que estaba buscando. Además de lo que @Alendri dijo, 'thistarget.width()' y 'thistarget.height()' deberían usar 'outerWidth()' y 'outerHeight()' para compensar el relleno en el destino. – Jeff
Si hay muchos objetos, mousemove puede ser costoso. Un paso para resolverlo es vincular el controlador en el mousedown y desvincularlo en el mouseup. Sin embargo, este ejemplo no fue escrito y probado con múltiples objetos; en particular, la desvinculación actual desvincula todo lo que estaba vinculado antes (se puede resolver nombrando la expresión lambda y refiriéndose a ese nombre al desvincular).
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');
});
O en 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. Mover el mouse
- 2. Mover el mouse mediante programación
- 3. ¿Cómo mover el cursor del mouse usando C#?
- 4. java mover componentes con el mouse
- 5. Mover texto en un div sin mover el div
- 6. Cómo mover (o hacer cualquier cosa con) el mouse
- 7. ¿Cómo eliminar el último DIV usando jQuery?
- 8. Mover el botón a Div
- 9. Cómo cambiar el título div usando jQuery
- 10. JQuery borde animado sin mover div
- 11. Perder al pasar el ratón al animar con jQuery (sin mover el mouse)
- 12. jquery mouse mouse out
- 13. usando el mouse con sendInput en C
- 14. cómo mover un div con las teclas de flecha
- 15. Hacer clic y mover el mouse mediante programación con VB.NET
- 16. ¿Cómo coloco un div relativo al puntero del mouse usando jQuery?
- 17. mover contenido de un div oculto a otro div mostrado
- 18. Mover el puntero del mouse en JavaScript
- 19. cómo obtener un div para mover aleatoriamente una página (usando jQuery o CSS)
- 20. Cómo capturo el evento de mover el mouse
- 21. ¿Cómo coloco un div junto a un clic del mouse usando JQuery?
- 22. Agregar Div Dinámicamente usando JQuery
- 23. div giratorio con movimiento del mouse
- 24. ¿Ocultar elemento div con jQuery, cuando el mouse no se mueve durante un período de tiempo?
- 25. Cómo mover div de abajo a arriba
- 26. Cómo rotar un div usando jQuery
- 27. ¿Cómo puedo desvanecer un div usando jQuery?
- 28. Cómo mover el elemento hijo de uno de los padres a otro usando jQuery
- 29. Mover un objeto en el área exterior con el puntero
- 30. Desplazamiento horizontal con la rueda del mouse en un div
Sí, esta es la mejor elección si usted no quiere echar a perder con las pruebas de los navegadores y todos aquellos dados. +1 de mí;) –