How to prevent Resizable and Draggable elements fr

2019-02-10 03:20发布

问题:

Hey all. I have the following code:

http://jsfiddle.net/g7Cgg/

As you can see, there are 2 simple DIVs that are stacked one above each other. Each of these DIVs are also set to be resizable and draggable. However, notice when you attempt to resize the first element, the second element collapses onto the first. From what I can see, this is because resizable changes the element to a position of absolute. How can I prevent this behavior? Is it possible to resize the element while retaining the ability to drag the element?

Note also, that if you change the elements to have a position of relative (add position:relative !important in the .demo style), it sort of prevents the collapsing, but the element "jumps" when you begin to resize or drag. Another weird behavior. Thanks for your help.

回答1:

In my specific case, here is what I did to fix it:

resizeableObj.resizable({
    start: function(event, ui) {        
        resizeableObj.css({
            position: "relative !important",
            top: "0 !important",
            left: "0 !important"
        });
    },
    stop: function(event, ui) {
        resizeableObj.css({
            position: "",
            top: "",
            left: ""
        });
    }
});

As you can see, in the resizable start event, set the position to relative (by using draggable and resizable in concert, an absolute positioning is added) and set the top and left to 0 to prevent the "jumping" that you sometimes see. In the stop event, reverse these changes. Works in my case, YMMV.



回答2:

Found a simpler solution (that fits my needs);

Inside jquery-ui.css, set the desired position and add !important to make sure it stays:

.ui-resizable {position: fixed !important} /* fix jquery's position absolute on resizing */


回答3:

Chrome Developer Tools indicates that jQuery UI uses the style="position:relative" attribute while the user is dragging/resizing. This will override any .demo{position:absolute} in the CSS.

The workaround is to set your own style="position:absolute" (you can use jQuery css() method for this) then explicitly set top and left for each div.

 $('.demo').css({position:"absolute"});


回答4:

Use this code to keep the element within the window space without scrolling while dragging:

$("#draggable").draggable({containment:"window", scroll: false})



回答5:

Just set the #container to position: relative;. http://jsfiddle.net/g7Cgg/1/