タブ付きのコンテンツが含まれているページがあります。いくつかのタブにはiframeが含まれており、便利な小さなスクリプトを使用して、コンテンツに合わせてiframeのサイズを変更しています。これは
function autoResize(id){
var newheight;
if(document.getElementById){
newheight=document.getElementById(id).contentWindow.document.body.scrollHeight;
}
newheight=(newheight)+40; // Makes a bit of extra room
document.getElementById(id).height= (newheight) + "px";
}
今日、私は小さなjQueryスクリプトを追加して、完全にロードされるまでタブ付き領域の表示を停止しました。これにより、読み込みが完了したときにタブが見苦しい小さなジャンプをするのを防ぎます。これはスクリプトです:
$(document).ready(function(){
$("#tabber").hide();
$("#loading").hide();
$("#loading").fadeIn(1000);
});
$(window).load(function(){
$("#loading").hide();
$("#tabber").fadeIn(300);
});
読み込み中のdivには読み込み中のアイコンが含まれ、タブ付きのdivはタブ付き領域のコンテンツ全体です。
このスクリプトは、iframeのサイズ変更の動作も停止しています。それをよりよく理解するために、私は別のスクリプトを追加しました:
function checkResize(id){
var win=document.getElementById(id).contentWindow.document.body.scrollHeight;
alert(win);
案の定、「勝利」はゼロになります。$( "#tabber")。hide()行を削除すると、"win"はiframeの高さの適切な数値を示します。
2つのものを互換性のあるものにする別の方法はありますか?
Vladは解決策を生み出しました:display:noneのjQueryバージョンの代わりにvisibility=hiddenのjQueryバージョンを使用する必要がありました。それは実際にはjQueryには存在しないので、別のStackOverflowの質問から、それを行うための独自の関数を作成する方法を見つけました。
最終的なスクリプトは
(function($) {
$.fn.invisible = function() {
return this.each(function() {
$(this).css("visibility", "hidden");
});
};
$.fn.visible = function() {
return this.each(function() {
$(this).css("visibility", "visible");
});
};
}(jQuery));
$(document).ready(function(){
$("#tabber").invisible();
$("#loading").hide();
$("#loading").fadeIn(1000);
});
$(window).load(function(){
$("#loading").hide();
$("#tabber").visible();
});
私の質問を見て彼らのアイデアを与えるのに苦労してくれたVladとRASに感謝します。