jQuery Drag/Resize with CSS Transform Scale

前端 未结 13 2016
忘了有多久
忘了有多久 2020-11-27 13:39

I am applying a CSS transform (and the browser specific -webkit, -o etc):

transform: matrix(0.5 , 0 , 0, 0.5, 0 , 0);

to a div then using jQuery\'s draggable

13条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-11-27 14:30

    I would add this as a comment to the accepted answer from Gung Foo but I don't have the rep to comment.

    I found Gung's answered worked perfectly for me however the resizable fix only worked when dragging from the bottom-right corner. I also have handles on the other three corners and found the element would shift so I had to add the fix from draggable to the resizable functions.

    Maybe there's a better way, or I missed something, but I found the modified resizable below worked for me from all handles:

    $(this).resizable({
        minWidth: -(contentElem.width()) * 10,  // these need to be large and negative
        minHeight: -(contentElem.height()) * 10, // so we can shrink our resizable while scaled
    
        // adjust the initial position to accomodate for the scale
        start: function(event, ui){
            ui.position.left = Math.round(ui.position.left/zoomScale);
            ui.position.top = Math.round(ui.position.top/zoomScale);
            ui.originalPosition.left = ui.position.left;
            ui.originalPosition.top = ui.position.top;
        },
    
        resize: function(event, ui) {
    
            var changeWidth = ui.size.width - ui.originalSize.width; // find change in width
            var newWidth = ui.originalSize.width + changeWidth / zoomScale; // adjust new width by our zoomScale
    
            var changeHeight = ui.size.height - ui.originalSize.height; // find change in height
            var newHeight = ui.originalSize.height + changeHeight / zoomScale; // adjust new height by our zoomScale
    
            ui.size.width = newWidth;
            ui.size.height = newHeight;
    
            // if the position is changed by a NW,NE,SW handle resize adjust for the scale
            var changeWidth = ui.size.width - ui.originalSize.width; // find change in width
            var newWidth = ui.originalSize.width + changeWidth / zoomScale; // adjust new width by our zoomScale
    
            var changeHeight = ui.size.height - ui.originalSize.height; // find change in height
            var newHeight = ui.originalSize.height + changeHeight / zoomScale; // adjust new height by our zoomScale
    
            ui.size.width = newWidth;
            ui.size.height = newHeight;
    
        }
    });
    

提交回复
热议问题