javascript - jQuery - UI Resizable 调整所有子元素及其字体大小

标签 javascript jquery children element resizable

我一直在寻找这个问题的答案 1 天,但还没有找到!

我想调整所有子元素的大小,方法是在调整父元素大小时计算父元素的大小并将其与它们进行比较,然后将宽度和高度应用于每个子元素。

我写了一些代码行,但这似乎没有按预期工作。 children 用这种方式变得狂野:

            $('.parentElement').resizable({
                resize: function(e, ui) {
                    var thisw = $(this).outerWidth();
                    var thish = $(this).outerHeight();

                      $(this).find("*").each(function(i, elm){
                        elw = $(elm).outerWidth();
                        elh = $(elm).outerHeight();
                        wr = parseFloat(elw) / parseFloat(thisw);
                        hr = parseFloat(elh) / parseFloat(thish);
                            w = elw * wr;
                            h = elh * hr;
                        $(elm).css({"width": w, "height": h});
                     });
                },

            });

也许有人可以帮助我更正上面的代码,以便子元素的大小调整顺利进行!

编辑:

这是一个fiddle demo .

你可以看到,通过我上面的代码,当我希望它们平滑地调整大小以适应它们的父大小时,子大小变得疯狂。

我知道我可以通过 jquery 或 css 按百分比设置子元素的宽度和高度,但我不想那样做,因为文本的大小无法按百分比调整以适应容器的大小!

最佳答案

您当前的代码无法实现让子项(及其字体大小)相对于父项大小的意图的原因是您没有测量原始子项和父项的尺寸/比率,因此您无法计算多少它们的尺寸已更改(以及您需要更改多少子尺寸/字体大小)。

利用此信息进行计算的一种方法是在发生任何调整大小之前将它们存储在 data 属性中:

// Storing initial parent CSS
$('.parentElement').each(function(){
    $(this).data("height", $(this).outerHeight());
    $(this).data("width", $(this).outerWidth());
});

// Storing initial children CSS
$('.parentElement *').each(function(){
    $(this).data("height", $(this).outerHeight());
    $(this).data("width", $(this).outerWidth());
    $(this).data("fontSize", parseInt($(this).css("font-size")));
});

$('.parentElement').resizable({
    resize: function (e, ui) {
        var wr = $(this).outerWidth()/$(this).data("width");
        var hr = $(this).outerHeight()/$(this).data("height");

        $(this).find("*").each(function (i, elm) {
            var w = $(elm).data("width") * wr;
            var h = $(elm).data("height") * hr;
            // Adjusting font size according to smallest ratio
            var f = $(elm).data("fontSize") * ((hr > wr) ? wr : hr);
            $(elm).css({
                "width": w,
                "height": h,
                "font-size": f
            });
        });
    },
});

现在,每次调整 .parentElement 的大小时,都会计算其当前尺寸与原始尺寸的比率,然后乘以其子元素的尺寸和字体大小。

这是一个 JSFiddle展示。希望这可以帮助!如果您有任何问题,请告诉我。

关于javascript - jQuery - UI Resizable 调整所有子元素及其字体大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31246837/

相关文章:

jquery - jQM页脚在转换前后消失和出现

jquery - 如果父 div 包含 X 类的子 div,如何动态更改 hX 标签的大小

Javascript:如何按数组中的对象值对数组进行排序?

javascript - 在按键功能上将文本框值传递给 javascript

javascript - 为什么 javascript 不能与 https 一起使用

jquery - 当我选择一个 select 选项时触发 mouseleave 事件,尽管它不在该区域之外

javascript - 必须在 Backbone.js 中指定 'url' 属性或函数错误

javascript - 使用 JavaScript/JQuery 创建多字段就地编辑器

搜索父文件夹 google Drive api 中的所有子项目

apache-flex - Flex 4 - 当容器的子级依赖于状态时如何循环它们