隐藏页面,直到加载所有内容高级

Ema*_*ail 33 javascript jquery document-ready

我有一个大量使用jQuery的网页.

我的目标是只在一切准备就绪时显示页面.

有了这个我想避免向用户显示恼人的页面呈现.

到目前为止我试过这个(#body_holder体内的包装):

$(function(){
    $('#body_holder').hide();
});
$(window).load(function() {
    $("#body_holder").show();
});
Run Code Online (Sandbox Code Playgroud)

这完全没问题,但弄乱了布局.

问题是隐藏包装器会干扰其他jQuery函数和使用的插件(例如layout-plugin).

所以我想必须有另一个技巧来做到这一点.在发生window.load之前,可能会在身体上放置一张图片或div?

你用什么方法?

编辑:

该解决方案最有可能有别的办法比display:nonehide();

ade*_*neo 46

使用jQuery做的任何事情通常都要等到document.ready,这已经太晚了恕我直言.

将div放在顶部,如下所示:

<div id="cover"></div>
Run Code Online (Sandbox Code Playgroud)

设置一些样式:

#cover {position: fixed; height: 100%; width: 100%; top:0; left: 0; background: #000; z-index:9999;}
Run Code Online (Sandbox Code Playgroud)

并在加载所有元素时用JS隐藏它:

$(window).on('load', function() {
   $("#cover").hide();
});
Run Code Online (Sandbox Code Playgroud)

或者,如果由于某种原因你的脚本使用更长的时间然后加载DOM元素,设置一个间隔来检查加载最慢的某个函数的类型,并在定义所有函数时删除封面!

$(window).on('load', function() {
    $("#cover").fadeOut(200);
});

//stackoverflow does not fire the window onload properly, substituted with fake load

function newW()
{
    $(window).load();
}
setTimeout(newW, 1000);
Run Code Online (Sandbox Code Playgroud)
#cover {position: fixed; height: 100%; width: 100%; top:0; left: 0; background: #000; z-index:9999; 
    font-size: 60px; text-align: center; padding-top: 200px; color: #fff;
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<ul>
    <li>This</li>
    <li>is</li>
    <li>a</li>
    <li>simple</li>
    <li>test</li>
    <li>of</li>
    <li>a</li>
    <li>cover</li>
</ul>

<div id="cover">LOADING</div>
Run Code Online (Sandbox Code Playgroud)


haw*_*126 28

这是一个jQuery解决方案,适合那些寻找:

使用css隐藏正文,然后在加载页面后显示它:

CSS:

html { visibility:hidden; }
Run Code Online (Sandbox Code Playgroud)

JavaScript的

$(document).ready(function() {
  document.getElementsByTagName("html")[0].style.visibility = "visible";
});
Run Code Online (Sandbox Code Playgroud)

当页面加载时,页面将从空白变为显示所有内容,没有内容闪烁,没有观看图像加载等.

  • $ 是 jQuery 不是纯 JavaScript。 (2认同)
  • 许多最好的解决方案 - 使用'html'元素的'visibility'属性本身消除了对包装kludges的需求. (2认同)

Igo*_*mić 25

您应该尝试将可见性设置为隐藏而不是display:none.将可见性设置为隐藏将保留所有元素位置和尺寸,因此不应创建布局问题.

  • 当页面加载时,不能设置 document.style.visibility 元素(直到稍后它才为 null)。然而,我的老板告诉我你可以设置 document.style.opacity = 0。 (2认同)

小智 6

开始你的 HTML:

<body style="opacity:0;">

在脚本的末尾:

document.body.style.opacity = 1;

  • 对我不起作用,但这确实有效: document.getElementsByTagName("body")[0].style.opacity = "1"; (2认同)