"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo solucionar problemas de arrastre/cambio de tamaño de jQuery con CSS Transform Scale?

¿Cómo solucionar problemas de arrastre/cambio de tamaño de jQuery con CSS Transform Scale?

Publicado el 2024-11-05
Navegar:511

How to Fix jQuery Drag/Resize Issues with CSS Transform Scale?

Arrastrar/cambiar tamaño de jQuery con escala de transformación CSS

Problema: Al aplicar una transformación CSS, específicamente transformar: matriz (0.5, 0, 0, 0.5, 0, 0);, a un div y usando los complementos arrastrables() y resizable() de jQuery en elementos secundarios, la alteración realizada por jQuery "no está sincronizada" con la posición del mouse. &&&]

Solución: parchear los complementos de jQuery

Se encontró una solución parcheando los complementos de jQuery, específicamente los métodos _mouseStart y _generatePosition de $.ui.draggable. Este enfoque funcionó eficazmente pero requirió modificar el código del complemento original.

Solución alternativa: usar controladores de devolución de llamada

Sin embargo, se descubrió una solución más óptima que no requiere modificar el código del complemento. Complementos de jQuery directamente. Al utilizar controladores de devolución de llamada, es posible ajustar las posiciones y tamaños de los elementos arrastrables y redimensionables según la escala de zoom actual.

Transform Scale Fix for Resizable:

$(esto).resizable({ ancho mínimo: -(contentElem.width()) * 10, altura mínima: -(contentElem.height()) * 10, cambiar el tamaño: función (evento, ui) { //Ajusta el ancho y el alto según la escala de zoom var changeWidth = ui.size.width - ui.originalSize.width; var newWidth = ui.originalSize.width changeWidth / zoomScale; var changeHeight = ui.size.height - ui.originalSize.height; var newHeight = ui.originalSize.height cambiarHeight / zoomScale; ui.size.width = nuevoAncho; ui.size.height = nuevaAltura; } });
$(this).resizable({
    minWidth: -(contentElem.width()) * 10, 
    minHeight: -(contentElem.height()) * 10, 
    resize: function(event, ui) {
        // Adjust width and height based on zoom scale
        var changeWidth = ui.size.width - ui.originalSize.width;
        var newWidth = ui.originalSize.width   changeWidth / zoomScale;

        var changeHeight = ui.size.height - ui.originalSize.height;
        var newHeight = ui.originalSize.height   changeHeight / zoomScale;

        ui.size.width = newWidth;
        ui.size.height = newHeight;
    }
});

Corrección de escala de transformación para arrastrable:

$(this).draggable({ manejar: '.arrastrar-mango', inicio: función (evento, ui) { ui.posición.izquierda = 0; ui.posición.arriba = 0; }, arrastrar: función (evento, interfaz de usuario) { // Ajusta las posiciones izquierda y superior según la escala de zoom var cambioIzquierda = ui.position.left - ui.originalPosition.left; var newLeft = ui.originalPosition.left cambiarIzquierda / (( zoomScale)); var changeTop = ui.position.top - ui.originalPosition.top; var newTop = ui.originalPosition.top changeTop / zoomScale; ui.position.left = nuevaIzquierda; ui.position.top = nuevoTop; } });
$(this).resizable({
    minWidth: -(contentElem.width()) * 10, 
    minHeight: -(contentElem.height()) * 10, 
    resize: function(event, ui) {
        // Adjust width and height based on zoom scale
        var changeWidth = ui.size.width - ui.originalSize.width;
        var newWidth = ui.originalSize.width   changeWidth / zoomScale;

        var changeHeight = ui.size.height - ui.originalSize.height;
        var newHeight = ui.originalSize.height   changeHeight / zoomScale;

        ui.size.width = newWidth;
        ui.size.height = newHeight;
    }
});
Este enfoque proporciona una solución limpia y no invasiva para manejar eventos de arrastre y cambio de tamaño dentro de elementos escalados usando jQuery sin modificar ninguna de sus funciones principales.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3