图像延迟加载与 Intersection Observer API 问题

2024-02-22

每个人。

我有 1609 张图像的图库,我正在尝试使用 Intersection Observer API 配置图像延迟加载,但遇到了问题,无论如何,我都可以立即上传所有图像,这意味着延迟加载不会不工作。下面是简单测试页面的完整代码清单:

    <?php 

    $listOfFolders = scandir(__DIR__);
    $images = [];


    foreach ($listOfFolders as $folder) {
        if($folder == "." || $folder == ".." || $folder == "index.php")
        {
            continue;
        } else {
            $innerFolders = scandir("./".$folder);
            foreach ($innerFolders as $innerFolder) {
                if($innerFolder == "." || $innerFolder == ".." || $innerFolder == "index.php")
                {
                    continue;
                } else {
                    $imagesList = scandir('./'.$folder.'/'.$innerFolder);
                    foreach ($imagesList as $image) {
                        if($image == "." || $image == ".." || $image == "index.php"){
                            continue;
                        } else {
                            array_push($images, ($folder.'/'.$innerFolder.'/'.$image));
                        }
                    }
                }
            }
        }
    }
?>

<!DOCTYPE html>
<html>
<head>
    <title>Lazy Loading testing</title>
        <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>



        <style type="text/css">

            .images-wrapper
            {
                display: flex;
                flex-wrap: wrap;
            }

            .images-wrapper .image-wrapper
            {
                max-width: 25%;
                width: 100%;
                margin-bottom: 15px;
            }

            .images-wrapper .image-wrapper img
            {
                max-width: 100%;
                min-height: 100px;
                background-color: #000;
            }
        </style>


</head>
<body>
    <div class="container">
        <div class="row">
            <div class="col-xs-12">
                <div class="images-wrapper">
                    <?php foreach ($images as $image): ?>
                        <div class="image-wrapper">
                            <img data-src="<?php echo './'.$image; ?>">
                        </div>
                    <?php endforeach ?>
                </div>
            </div>
        </div>
    </div>

    <script type="text/javascript">
                let options = {
                    root: null,
                    rootMargin: "0px 0px -150px 0px",
                    threshold: 1.0
                }

                let observer = new IntersectionObserver(
                    (entries, self) => {
                        entries.forEach(entry => {
                            console.log(entry.isIntersecting);
                            if(entry.isIntersecting){
                                preloadImage(entry.target);
                                self.unobserve(entry.target);
                            }
                        });
                    }, options);

                let imgs = document.querySelectorAll('[data-src]');
                imgs.forEach(img => {
                    observer.observe(img);
                });

                function preloadImage(img)
                {
                    let imgDataSrcAttr = img.getAttribute('data-src');
                    img.setAttribute("src", imgDataSrcAttr);
                }
            </script>


    <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/css/bootstrap.min.css">
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha.4/js/bootstrap.min.js"></script>
</body>
</html>

我检查的第一件事是“isIntersecting”属性,由于某种原因,所有 1609 个图像都返回“true”,而其中只有大约 20-30 个应该具有此值。

不知道为什么会这样。有什么提示吗?


看来我已经找到问题的根源了:显示:柔性对于父容器。

我的猜测是,由于这个 CSS 属性最初将所有图像排列在一行中,并且 JS 认为所有图像都位于指定的矩形中以进行图像加载。看来使用弹性包裹:包裹不会改变任何东西 - 只是使图像看起来像是被分成行 - 对于 JS,它们仍然在观察到的矩形内排列成行

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

图像延迟加载与 Intersection Observer API 问题 的相关文章