如何在背景图像中应用延迟加载

时间:2019-09-17 作者:abhishek kalotra

我正在努力提高我的页面速度,为了做到这一点,我使用了许多延迟加载插件,它们适用于普通图像,但不适用于背景图像。我需要延迟加载背景图像以提高我的页面速度,请帮助!!!

1 个回复
最合适的回答,由SO网友:HU ist Sebastian 整理而成

这并不是插件可以安装的东西,或者至少对您的工作来说是必要的。

但是,您可以自己构建它。

步骤1:将IntersectionObserver polyfill排队,您可以在此处找到:https://github.com/w3c/IntersectionObserver/blob/master/polyfill/intersection-observer.js 以获得对旧浏览器的支持。

步骤2:更改使用背景图像的HTML元素的代码。添加一个类(比如lazybg)并将背景图像放入数据属性(比如data lazybg)。所以你改变了这个:

<div class="mybackgroundimagediv" style="background-image:url(img/myawesomeimage.jpg);"></div>
对此:

<div class="mybackgroundimagediv lazybg" data-lazybg="http://myawesomewebsite.com/img/myawesomeimage.jpg" style=""></div>
步骤3:编写一些javascript来缓慢加载背景图像:

<script>
let lazyObjectObserver = new IntersectionObserver(function(entries, observer) {
        entries.forEach(function(entry) {
            if (entry.isIntersecting) {
                let lazyObject = entry.target;
                if(!(lazyObject.dataset.lazybg == \'\')){
                    bgsrc = lazyObject.dataset.lazybg;
                    lazyObject.style.backgroundImage = \'url(\'+bgsrc+\')\';
                    lazyObject.classList.remove("lazybg");
                    lazyObject.dataset.lazybg = \'\';
                    lazyObjectObserver.unobserve(lazyObject);
                }
            }
        });
    },{ rootMargin: "0px 0px 0px 0px" });

document.addEventListener("DOMContentLoaded", function() {
  var lazyObjects = [].slice.call(document.querySelectorAll(".lazybg"));
  lazyObjects.forEach(function(lazyObject) {
        lazyObjectObserver.observe(lazyObject);
  });
});
</script>
成功!准备好的div现在将在进入视口时加载背景图像!

相关推荐

Host images only on CDN

我开发了一个wordpress网站,该网站托管在AWS上。该网站运行良好,但由于我希望它成为一个电子商务网站,将有大量的图像。AWS的托管帐户仅提供30 GB的存储空间。所以我想host images completely on an external CDN off my server. 但最近对CDN的搜索导致我只缓存CDN,我希望只在其他服务器上托管图像。有线索吗?