我有一个页面,上面有一些选项卡式内容。几个选项卡包含 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 包含一个加载图标,tabber div 是选项卡区域的全部内容。
该脚本还停止了 iframe 调整大小的工作。为了更好地理解它,我添加了另一个脚本:
function checkResize(id){
var win=document.getElementById(id).contentWindow.document.body.scrollHeight;
alert(win);
果然,“赢”出现为零。如果我删除 $("#tabber").hide() 行,“win”会显示 iframe 高度的合理数字。
有没有另一种方法可以使两者兼容?
Vlad 提出了解决方案:我必须使用 jQuery 版本的 visibility=hidden 而不是 jQuery 版本的 display:none。这在 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,感谢他们不厌其烦地查看我的问题并提出他们的想法。