0

我正在使用下面的函数在网格行上设置等高列。在初始页面加载时,该函数将高度设置为 '0' on div.gallery-item。刷新时,函数会正确启动并分配函数中设置的高度。

这是脚本:

/* Responsive equal height columns for gallery (http://css-tricks.com/examples/EqualHeightsInRows/) */

var currentTallest = 0,
currentRowStart = 0,
rowDivs = new Array();

function setConformingHeight(el, newHeight) {
// set the height to something new, but remember the original height in case things     change
el.data("originalHeight", (el.data("originalHeight") == undefined) ? (el.height()) : (el.data("originalHeight")));
el.height(newHeight);
}

function getOriginalHeight(el) {
// if the height has changed, send the originalHeight
return (el.data("originalHeight") == undefined) ? (el.height()) : (el.data("originalHeight"));
}

function columnConform() {

// find the tallest DIV in the row, and set the heights of all of the DIVs to match it.
$('div.gallery-item').each(function() {

    // "caching"
    var $el = $(this);

    var topPosition = $el.position().top;

    if (currentRowStart != topPosition) {

        // we just came to a new row.  Set all the heights on the completed row
        for(currentDiv = 0 ; currentDiv < rowDivs.length ; currentDiv++) setConformingHeight(rowDivs[currentDiv], currentTallest);

        // set the variables for the new row
        rowDivs.length = 0; // empty the array
        currentRowStart = topPosition;
        currentTallest = getOriginalHeight($el);
        rowDivs.push($el);

    } else {

        // another div on the current row.  Add it to the list and check if it's taller
        rowDivs.push($el);
        currentTallest = (currentTallest < getOriginalHeight($el)) ? (getOriginalHeight($el)) : (currentTallest);

    }
    // do the last row
    for (currentDiv = 0 ; currentDiv < rowDivs.length ; currentDiv++) setConformingHeight(rowDivs[currentDiv], currentTallest);

});

}


$(window).resize(function() {
columnConform();
});

$(function() {
columnConform();
});

我知道这与我加载函数的方式有关。我从中获取此脚本的文章的建议是使用window.onload如果图像是在列上设置不同高度的原因,但我尝试将其添加到脚本的最后一部分,如下所示,并且该函数没有完全触发。

$(window).onload = (function() {
columnConform();
});

有什么建议吗?

4

2 回答 2

1

你应该使用:

window.onload = columnConform;

代替:

$(function () {
    columnConform();
});

这样,图像的大小以及父容器将是相关的。

于 2014-04-17T16:41:38.460 回答
0

您是否尝试将代码存储在$( document ).ready( handler )段中而不是 onload 中?

链接 ->这里

于 2014-04-17T16:40:25.493 回答