html 图片很多的情况下,怎样实现先打开页面,再慢慢加载?

html-css07

html 图片很多的情况下,怎样实现先打开页面,再慢慢加载?,第1张

<!DOCTYPE HTML>

<html>

<head>

    <title>Page Title</title>

    <meta http-equiv="Content-Type" content="text/html charset=UTF-8" />

    <script>

        onload = function() {

            var imgs = document.querySelectorAll("img")

            console.log("加载中...")

            for (var i = 0 i < imgs.length i++) {

             var img = imgs[i]

                (function(i) {

                    setTimeout(function() {

                        img.src = "a" + i + ".jpg"

                        img.onload = function(){

                         if(i == imgs.length - 1){

                         console.info("加载完毕")

                         }

                        }

                        img.onerror = function(){

                         console.error("加载错误")

                        }

                    }, 2000 * i)

                })(i)

            }

        }

    </script>

</head>

<body>

    <img />

    <img />

    <img />

    <img />

</body>

</html>

图片先用占位符表示,不要将图片地址放到src属性中,而是放到其它属性(data-original)中

页面加载完成后,监听窗口滚动,当图片出现在视窗中时再给它赋予真实的图片地址,也就是将data-original中的属性拿出来放到src属性中

在滚动页面的过程中,通过给scroll事件绑定lazyload函数,不断的加载出需要的图片

注意:请对lazyload函数使用防抖与节流,不懂这两的可以自己去查

3.可视区加载

这里也分为两种情况

1、页面滚动的时候计算图片的位置与滚动的位置

2、通过新的API: IntersectionObserver API(可以自动"观察"元素是否可见)

如上,data- 属于自定义属性, ele.dataset. 可以读取自定义属性集合

img.srcset 属性用于设置不同屏幕密度下,image自动加载不同的图片,比如<img src="image-128.png" srcset="image-256.png 2x" />

预加载

提前加载图片,当用户需要查看时可直接从本地缓存中渲染

加载方式目前主要有两种

待到满足触发条件后,再通过JS渲染