所有图片准备好显示后显示网站

时间:2017-05-22 20:49:39

标签: javascript jquery html css

我使用此代码来设置整个网站的不透明度。

HTML
<body>
        <script>document.body.className += ' fade-out';</script>
...
</body>

JS
$(function(){
            $('body').removeClass('fade-out');
});

CSS:
body{
  transition:1s all;
}
body.fade-out {
    opacity: 0;
    transition: none;
}

以此笔为例: https://codepen.io/timsim/pen/bWOoYr

这会激活网站的不透明度,但不会等待所有图片都准备好显示。整个网站正在改变不透明度,然后图像跳入。不好看。这只会在第一次加载网站时发生。

我想在图像准备好显示时触发正文不透明动画。 window.onload似乎不是正确的地方。你会怎么做?

3 个答案:

答案 0 :(得分:5)

将jQuery代码包装在内:

$(window).on("load", function() {
});

不要使用$(document).ready();

在未加载图像时,DOM也准备就绪。一旦完成图像下载,将触发加载。 所以在你的情况下:

$(window).on("load", function() {
  $('body').removeClass('fade-out');
});

这应该做你想要的

答案 1 :(得分:1)

您可以创建一个预加载图像的功能。然后,每一个加载后你就可以删除该类。

const images = ['https://pbs.twimg.com/media/C7gflT8XUAAhsHm.jpg'];

function loadImg(img) {
  return new Promise((resolve, reject) => {
    const imgEl = document.createElement('img');
    imgEl.addEventListener('load', () => {
      resolve();
    });
    imgEl.src = img;
  });
}

function loadAll(imageArr) {
  const promises = imageArr.map(img => loadImg(img));
  Promise.all(promises).then(() => {
    document.querySelector('body').classList.remove('fade-out');
  });
}

loadAll(images);

答案 2 :(得分:-2)

我认为setTimeout将是一个不错的选择:

$(function(){
            $('body').setTimeout(removeClass('fade-out'), 3000);
});

将延迟淡出3秒