所以,我自己解决了问题。但是,无论如何,感谢@prabeen-giri 帮助我以正确的方式思考。
首先,我需要解释一下预加载器机制。看看CSS:
position: fixed;
display: block;
top: 0; /* making preloader cover all screen */
right: 0;
left: 0;
bottom: 0;
background-repeat: no-repeat;
background-position:center; center;
background-size: auto auto;
background-image: url(../images/preload.png); /* your picture should be here */
background-color:#000;
z-index:99; /* must be the highest number of all others to cover them all */
所以,你的预加载器只是一张图片或其他东西,它覆盖所有窗口,并在加载整个内容时平滑地消失(通过 jQuery)。
<div id="preloader" class="preloader"></div>
这是脚本:
<script type="text/javascript">
$(window).load(function() {
$("#preloader").delay(700).fadeOut("slow");});
</script>
为了解决我的问题并在通过域名进入网站时仅显示一次预加载器,我们需要使用 cookie。有 2 个 cookie 辅助函数(来自怪异模式 http://www.quirksmode.org/js/cookies.html):
function createCookie(name,value,days) {
if (days) {
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
}
else var expires = "";
document.cookie = name+"="+value+expires+"; path=/";
}
function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}
所以,我们需要输入自己的cookie来创建运行脚本的条件。最初我们创建的 cookie 等于null这个相等性将成为运行脚本的条件。之后我们设置 cookie 一些值以不再启动 jQuery。这是代码:
<script type="text/javascript">
$(window).load(function() {
if (readCookie('referer') == null){
$("#preloader").delay(700).fadeOut("slow");}
createCookie('referer',1,0);
});
</script>
但是刷新页面后如何去除我们的预载图片和背景呢?因为我们只是根据条件禁用了 jQuery fadeOut 过程。图片和黑色背景一直覆盖着我们的窗户,不会消失。
让我们创建新条件并将其放入
<script>
if (readCookie('referer') == null) {
document.write("<style>.preloader {background-image: url(../images/preload.png); background-color:#000; z-index:99;}</style>");
}
</script>
通过这个,我们将图像、z-index 和背景设置为预加载器类。我们的cookie等于null仅当用户通过域名进入网站时OR已清除他的 cookie 并刷新页面(这似乎不太可能)。如果 cookie 等于1,正如我们上面设置的,我们的预加载器将显示,但没有图片和背景,并且我们的 jQuery fadeOut 也将不会运行!
所以,我的问题如我所愿解决了,预加载器只会出现一次。再次感谢@prabeen-giri!