【问题标题】:JQuery Resizable - Update element absolute position while resizingJQuery Resizable - 在调整大小时更新元素绝对位置
【发布时间】:2012-12-15 15:56:34
【问题描述】:

我有很多 divs 分布在行和列中(使用 jQuery 生成)。这些divs 中的每一个都是可调整大小的,使用JQuery UI Resizable。为了定义要求,所有divs 必须使用绝对定位。因此,当我重新调整这些 div 的大小时,脚本应该更新其下方所有 div 的 top 属性(位于当前调整大小的 div 之后的同一列和一行)。

这是我现在的代码:

updatePositions: function() {
        var update = 0;
        $(".element").resizable({
            handles: 's',
            start: function(event, ui) {
                event.stopPropagation();
                var el = $(this);
                var el_row = parseInt(el.attr("row"));
                var el_rel = parseInt(el.attr("rel"));
                var el_col = parseInt(el.attr("col"));
                update = $(".element").filter(function() {
                    return(
                        $(this).attr("row") > el_row &&
                        $(this).attr("col") == el_col &&
                        $(this).attr("rel") != el_rel
                    );
                    });
            },
            resize: function(event, ui) {
                update.each(function(event){
                    var top = $(this).position().top + $(this).height() + 20;
                    $(this).css("top", top )
                });
            }
        })
    }

这是一个例子:JSFiddle

如您所见,所有 div 都找到了,我可以更新顶部位置。但由于某种原因,调整大小时变得疯狂!似乎我更新的次数与在每个选定 div 上找到的磁贴一样多。

【问题讨论】:

    标签: javascript jquery-ui css-position jquery-resizable


    【解决方案1】:

    我终于解决了这个问题。 JSFiddle

    这是js代码:

    function CacheType(){
        corrtop = 0;
        rel = 0;
    }
    
    $.extend({
        updatePositions: function() {
            var update = 0;
            var arr = new Array();
            $(".element").resizable({
                handles: 's',
                start: function(event, ui) {
                    event.stopPropagation();
                    var el = $(this);
                    var el_row = parseInt(el.attr("row"));
                    var el_rel = parseInt(el.attr("rel"));
                    var el_col = parseInt(el.attr("col"));
                    var ex = el.position().top;
                    var ey = el.height();
                    update = $(".element").filter(function() {
                        if(
                            $(this).attr("row") > el_row &&
                            $(this).attr("col") == el_col &&
                            $(this).attr("rel") != el_rel
                        ){
                            var tmp = new CacheType();
                            tmp.corrtop = $(this).position().top - ex - ey;
                            tmp.rel = $(this).attr('rel');
                            arr.push(tmp);
                            return true;
                        }else{
                            return false;
                        }
                        });
                },
                resize: function(event, ui) {
                    var x = $(this).height() + $(this).position().top;
                    update.each(function(event){
                        for(var i=0;i<arr.length; i++){
                            var tmp = arr[i];
                            var rel = $(this).attr('rel');
                            if(rel == tmp.rel)
                                $(this).css("top", x + tmp.corrtop);
                        }
                    });
                }
            })
        }
    });
    $(document).ready(function(){
        $.updatePositions();
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多