我讨厌能够看到网页加载的过程。我认为等待页面完全加载并准备好显示,包括所有脚本和图像,然后再由浏览器显示会更具吸引力。所以我有两个问题:
- 我该如何做到这一点?
- 这是常见的做法吗?如果不是,为什么?
我讨厌能够看到网页加载的过程。我认为等待页面完全加载并准备好显示,包括所有脚本和图像,然后再由浏览器显示会更具吸引力。所以我有两个问题:
出于所有给出的原因以及更多原因,这是一个非常糟糕的想法。话虽如此,以下是使用 jQuery 实现它的方法:
<body>
<div id="msg" style="font-size:largest;">
<!-- you can set whatever style you want on this -->
Loading, please wait...
</div>
<div id="body" style="display:none;">
<!-- everything else -->
</div>
<script type="text/javascript">
$(document).ready(function() {
$('#body').show();
$('#msg').hide();
});
</script>
</body>
如果用户禁用了JavaScript,他们将永远无法看到页面。如果页面永远无法完成加载,他们也看不到页面。如果页面加载时间过长,他们可能会认为出了问题,并选择去其他地方而不是一直等待。
<noscript>
标签来“撤消”display:none
的效果,以避免无法使用JavaScript的问题。 - Chris Thompson$(window)
而不是 $(document)
。 - Jake Irelandhttp://www.webdeveloper.com/forum/showthread.php?t=180958
底线是,页面加载时至少需要展示一些视觉活动,而我认为分段加载页面并不算太糟糕(假设你没有做一些严重拖慢页面加载时间的事情)。
display: none
。一旦所有内容都加载完毕,旋转器就会淡出,内容就会淡入。这个方法很有效,因为现在旋转器已经被普遍理解为“正在加载,请稍等”。注意:它使用jQuery。 - ADTC以下是使用jQuery解决的方案:
<script type="text/javascript">
$('#container').css('opacity', 0);
$(window).load(function() {
$('#container').css('opacity', 1);
});
</script>
我把这个脚本放在了</body>
标签后面。只需将 "#container" 替换为您要隐藏的 DOM 元素的选择器即可。我尝试了几种变体(包括 .hide()
/.show()
和 .fadeOut()
/.fadeIn()
),仅设置不透明度似乎对页面影响最小(闪烁、页面高度变化等)。您还可以将 css('opacity', 0)
替换为 fadeTo(100, 1)
,以获得更平滑的过渡效果。(不,fadeIn()
不起作用,至少在 jQuery 1.3.2 中是这样。)$(document).ready(function() {
setTimeout('$("#container").css("opacity", 1)', 1000);
});
所以现在,最糟糕的情况是,您的页面将需要额外等待一秒钟才能出现。
这确实有一个有效的用途。其一是防止人们在所有页面元素和JavaScript加载完毕之前单击链接/触发JavaScript事件。
在IE中,您可以使用页面转换,这意味着页面直到完全加载后才显示:
<meta http-equiv="Page-Enter" content="blendTrans(Duration=.01)" />
<meta http-equiv="Page-Exit" content="blendTrans(Duration=.01)" />
注意这个短暂的持续时间。它只足够确保页面在完全加载之前不会显示。
在FireFox和其他浏览器中,我使用的解决方案是创建一个与页面大小相同且为白色的DIV,然后在页面底部放置隐藏它的JavaScript代码。另一种方法是使用jQuery并同样地将其隐藏。虽然不像IE的解决方案那样无痛苦,但两者都能很好地工作。
<style> body {opacity:0;}</style>
<script>
window.onload = function() {setTimeout(function(){document.body.style.opacity="100";},500);};
</script>
这是好还是坏的做法取决于您的访问者以及等待的时间。
仍然存在一个未解决的问题,我在这里没有看到任何答案,那就是如何确保页面已经稳定。例如,如果您正在加载字体,则页面可能会在加载和显示所有字体之前重新排版。我想知道是否有事件可以告诉我页面已经完成渲染。
<?php
ob_start();
// Your PHP codes here
?>
YOUR HTML HERE
<?php
$html_output = ob_get_contents();
ob_end_clean();
echo $html_output;
?>
您将无法逐个加载查看任何内容。唯一的加载器是您的浏览器标签旋转器,在所有内容都加载完成后立即显示所有内容。试试吧。
这种方法完全符合html文件规范。
必须使用jQuery
我看过一些页面,它们在页面上方放置一个黑色或白色的div,然后在document.load事件中将其移除。或者你可以使用jQuery的.ready方法。话虽如此,那是我见过最烦人的网页之一,我建议不要这样做。
#some_div
{
display: none;
}
然后在JavaScript中将一个函数分配给document.onload以删除该div。
jQuery使这样的事情变得非常容易。
<html class="no-js">
<head>...</head>
<body>
<header>...</header>
<main>...</main>
<footer>...</footer>
</body>
</html>
CSS
//at the beginning of the page
.js main, .js footer{
opacity:0;
}
JAVASCRIPT
//at the beginning of the page before loading jquery
var h = document.querySelector("html");
h.className += ' ' + 'js';
h.className = h.className.replace(
new RegExp('( |^)' + 'no-js' + '( |$)', 'g'), ' ').trim();
JQUERY
//somewhere at the end of the page after loading jquery
$(window).load(function() {
$('main').css('opacity',1);
$('footer').css('opacity',1);
});
资源