"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como corrigir problemas de arrastar/redimensionar jQuery com CSS Transform Scale?

Como corrigir problemas de arrastar/redimensionar jQuery com CSS Transform Scale?

Publicado em 2024-11-05
Navegar:430

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

jQuery arrastar/redimensionar com escala de transformação CSS

Problema: Ao aplicar uma transformação CSS, especificamente transform: matriz (0.5, 0, 0, 0.5, 0, 0);, para um div e usando os plug-ins draggable() e resizable() do jQuery em elementos filhos, a alteração feita pelo jQuery fica "fora de sincronia" com a posição do mouse.

Solução: Patching de plug-ins jQuery

Uma solução foi encontrada corrigindo os plug-ins jQuery, especificamente os métodos _mouseStart e _generatePosition de $.ui.draggable. Essa abordagem funcionou de maneira eficaz, mas exigiu a modificação do código original do plug-in.

Solução alternativa: usando manipuladores de retorno de chamada

No entanto, foi descoberta uma solução mais ideal que não requer modificação do Plug-ins jQuery diretamente. Ao utilizar manipuladores de retorno de chamada, é possível ajustar as posições e tamanhos de elementos arrastáveis ​​e redimensionáveis ​​com base na escala de zoom atual.

Correção de escala de transformação para redimensionável:

$(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;
    }
});

Correção de escala de transformação para arrastável:

$(this).draggable({
    handle: '.drag-handle', 
    start: function(event, ui) {
        ui.position.left = 0;
        ui.position.top = 0;
    }, 
    drag: function(event, ui) {
        // Adjust left and top positions based on zoom scale
        var changeLeft = ui.position.left - ui.originalPosition.left;
        var newLeft = ui.originalPosition.left   changeLeft / (( zoomScale));

        var changeTop = ui.position.top - ui.originalPosition.top;
        var newTop = ui.originalPosition.top   changeTop / zoomScale;

        ui.position.left = newLeft;
        ui.position.top = newTop;
    }
});

Essa abordagem fornece uma solução limpa e não invasiva para lidar com eventos de arrastar e redimensionar em elementos dimensionados usando jQuery sem modificar nenhuma de suas funcionalidades principais.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3