すべての列から可能なすべての LI 要素を含む十分な大きさが必要な N 列を含む Html/JavaScript アプリケーションがあります。
簡単な解決策は、各列のすべてのアイテムの高さをカウントし、パディングを補正してから、各列の高さをその合計に設定するようです。
これは、LI 要素にプレーン テキストが含まれている場合にうまく機能します。残念ながら、LI 要素に代わりに画像が含まれている場合、さまざまなブラウザーで問題が発生します。たとえば、FireFox で最初にページを読み込んだときは、次のスクリーンショットのように見えますが、もう一度更新すると問題なく動作します。Chrome でも期待どおりに動作しません。
私のアプリケーションは、ページの読み込み時に LI 要素を事前設定しません。次のように JavaScript を使用します。
function populateUnsetAnswers(unsetCategoryAnswers) {
for (i in unsetCategoryAnswers) {
if (unsetCategoryAnswers.hasOwnProperty(i.toString())) {
$('#categoryQuestionArea #possibleAnswers').append(
categoryAnswerLiTag(unsetCategoryAnswers[i])
);
}
}
}
function categoryAnswerLiTag(unsetCategoryAnswer) {
var html = '<li id="' + unsetCategoryAnswer.id + '">';
if (unsetCategoryAnswer.image) {
html += '<img class="categoryAnswerImage" title="';
html += unsetCategoryAnswer.text;
html += '" src="/trainingdividend/rest/streaming/';
html += unsetCategoryAnswer.image.fileName;
html += '" style="height: ';
html += unsetCategoryAnswer.image.height;
html += ';';
html += '" />';
} else {
html += unsetCategoryAnswer.text
}
html += '</li>';
return html;
}
ページの読み込みが完了すると、ajax リクエストがすべてのオブジェクトを取得して LI 要素に配置し、上記の最初の関数を呼び出します。
すべての LI 要素が作成されたら、その直後にこの関数を呼び出します。
function resize() {
var currentHeight, totalHeight;
totalHeight = 0;
$("#categoryQuestionArea ul").children().each(function() {
currentHeight = $(this).height();
totalHeight += currentHeight + 13;
});
$("#categoryQuestionArea ul").height(totalHeight);
$("#categoryQuestionArea div#separator").css("padding-top", (totalHeight / 2) + "px");
}
jQueryに「すべてのLIが完全にロードされ、画像がレンダリングされるまで resize() を呼び出さないでください」と伝える方法はありますか?
最初のページの読み込み時に、これらの LI 要素の高さが 0 または小さい値になっているのは、画像が含まれていないためだと思います。そのため、サイズ変更関数が間違った結果を計算しています (いくつかのアラート ステートメントでこれをテストしました)。 )。LI が設定され、画像が読み込まれている限り、高さの合計は問題なく計算されます。
何か助けはありますか?ありがとう