Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 调整一个元素相对于另一个元素的大小_Javascript_Jquery_Jquery Ui_Jquery Ui Resizable - Fatal编程技术网

Javascript 调整一个元素相对于另一个元素的大小

Javascript 调整一个元素相对于另一个元素的大小,javascript,jquery,jquery-ui,jquery-ui-resizable,Javascript,Jquery,Jquery Ui,Jquery Ui Resizable,我想在不中断的情况下在父元素的内部和外部重新调整元素的大小。求你了 我假设有三行,每行有几个具有相似或不同css属性的元素。例如: element-1, element-2, ....... element-6 @编辑 内部可调整尺寸:请参见图中。当我在“row-1”中调整元素-1的大小时,其他兄弟姐妹调整了宽度。我可以自己做 外部可调整尺寸:请看图片。元素1被重新调整大小,其长度不会影响其父行1和同级元素2的任何尺寸,但会影响其他元素,例如元素3和4调整了元素1的宽度。这就是我想问的&我做

我想在不中断的情况下在父元素的内部和外部重新调整元素的大小。求你了

我假设有三行,每行有几个具有相似或不同css属性的元素。例如:

element-1, element-2, ....... element-6
@编辑 内部可调整尺寸:请参见图中。当我在“row-1”中调整元素-1的大小时,其他兄弟姐妹调整了宽度。我可以自己做


外部可调整尺寸:请看图片。元素1被重新调整大小,其长度不会影响其父行1和同级元素2的任何尺寸,但会影响其他元素,例如元素3和4调整了元素1的宽度。这就是我想问的&我做不到。

没有直接的方法来实现这个结果。您必须更改CSS并添加以下内容:

.row {
    position: relative;
}
.element {
    position: absolute;
    /*Remove the float attribute, which is obsolete*/
}
JavaScript代码也必须更改:

$(function(){
    var zIndex = 100;
    $('.element').mouseover(function(){
        var originalHeight = $(this).height();
        $(this).resizable({start: function() {
                   $(this).css('z-index', ++zIndex);
        }, stop: function(){
            /*Horizontal fix*/
            var nxt = $(this).nextAll();
            var width = $(this).position().left + $(this).width();
            var safeWidth = width;
            var root = $(this).parent();
            var thisheight = $(this).height();
            var height = root.height();
            for(var i=0,l=nxt.length;i<l;i++){
                $(nxt[i]).css("left", width+"px");
                width += $(nxt[i]).width();
                if($(nxt[i]).height() > height) safeWidth = width;
            }
            /*Vertical fix*/
            if(thisheight > height || originalHeight > thisheight){
                var nxt = root.nextAll();
                for(var i=0, l=nxt.length; i<l; i++){
                    var tht = nxt[i];
                    if(height >= thisheight){
                        width = 0;
                    } else {
                        width = safeWidth;
                    }
                    height += $(tht).height();
                    if(!/(^|\s)row(\s|$)/.test(tht.className)){
                        continue;
                    }
                    var in_nxt = $(tht).children();
                    for(var j=0,k=in_nxt.length; j<k; j++){
                        $(in_nxt[j]).css("left", width+"px");
                        width += $(in_nxt[j]).width();
                    }
                }
            }
            originalHeight = thisheight;
        }});
       });
    $('.element').each(function(){
        var ths = $(this).prevAll();
        var width = 0;
        for(var i=0,l=ths.length;i<l;i++)width+=$(ths[i]).width();
        $(this).css("left", width+"px")});
});

预览:

实现这一结果没有简单的方法。您必须更改CSS并添加以下内容:

.row {
    position: relative;
}
.element {
    position: absolute;
    /*Remove the float attribute, which is obsolete*/
}
JavaScript代码也必须更改:

$(function(){
    var zIndex = 100;
    $('.element').mouseover(function(){
        var originalHeight = $(this).height();
        $(this).resizable({start: function() {
                   $(this).css('z-index', ++zIndex);
        }, stop: function(){
            /*Horizontal fix*/
            var nxt = $(this).nextAll();
            var width = $(this).position().left + $(this).width();
            var safeWidth = width;
            var root = $(this).parent();
            var thisheight = $(this).height();
            var height = root.height();
            for(var i=0,l=nxt.length;i<l;i++){
                $(nxt[i]).css("left", width+"px");
                width += $(nxt[i]).width();
                if($(nxt[i]).height() > height) safeWidth = width;
            }
            /*Vertical fix*/
            if(thisheight > height || originalHeight > thisheight){
                var nxt = root.nextAll();
                for(var i=0, l=nxt.length; i<l; i++){
                    var tht = nxt[i];
                    if(height >= thisheight){
                        width = 0;
                    } else {
                        width = safeWidth;
                    }
                    height += $(tht).height();
                    if(!/(^|\s)row(\s|$)/.test(tht.className)){
                        continue;
                    }
                    var in_nxt = $(tht).children();
                    for(var j=0,k=in_nxt.length; j<k; j++){
                        $(in_nxt[j]).css("left", width+"px");
                        width += $(in_nxt[j]).width();
                    }
                }
            }
            originalHeight = thisheight;
        }});
       });
    $('.element').each(function(){
        var ths = $(this).prevAll();
        var width = 0;
        for(var i=0,l=ths.length;i<l;i++)width+=$(ths[i]).width();
        $(this).css("left", width+"px")});
});

预览:

我试图编辑你的问题,但它仍然不是一个明确的解释,至少对我来说是这样。@Shef:请再看一看,我现在试图更好地解释。谢谢,我试图编辑你的问题,但它仍然不是一个明确的解释,至少对我来说是这样。@Shef:请再看一看,我现在试图更好地解释。谢谢,谢谢,罗布。这有助于我解决问题。谢谢罗布。这有助于我解决问题。