【问题标题】:Lazy Load Images Only After Bootstrap Modal has Opened仅在启动模式打开后延迟加载图像
【发布时间】:2017-02-14 14:07:49
【问题描述】:

我在这里找到了两个类似的答案,但对于我的情况都没有成功(鉴于我将它们转化为我的情况的能力有限)。我有一个包含很多相当大图像的页面,Bootstrap 的默认方法是在页面加载时加载所有模态图像。可见的 html 呈现得相当快(我有一个微调器),但隐藏模式的额外加载时间使页面不切实际。我希望页面仅加载可见(非模态)内容以完成页面加载(并清除微调器),然后仅在触发该模态时才加载每个模态的内容。我已经尝试了所有我能找到的延迟加载解决方案,但图像不会在模式中呈现('data-src' 占位符呈现但不是应该替换它们的'src' 图像)。我只想延迟加载(或加载“show.bs.modal”)模态的大图像,即“modal-body”类中的那些。我希望这足够清楚。

示例代码:

/* Javascript placed in the head */

<script>

function lazyLoad(){
    var $images = $('.lazy_load');

    $images.each(function(){
        var $img = $(this),
            src = $img.attr('data-src');

        $img
            .on('load',imgLoaded($img[0]))
            .attr('src',src);
        });
    };

    $('.modal-body').on("show.bs.modal", function () {
    lazyLoad();
};          

</script>

/* HTML in the modal section */


<div class="portfolio-modal modal fade" id="portfolioModal1" tabindex="-1" role="dialog" aria-hidden="true">
        <div class="modal-content">
            <div class="galleryheader">
                <img src="headerimage_1.png" height="77" width="1024">
            </div>
            <div class="close-modal" data-dismiss="modal">
                <div class="lr">
                    <div class="rl">
                    </div>
                </div>
            </div>
            <div class="container">
                <div class="row">
                    <div>
                        <div class="modal-body lazy_load">
                            <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-src="images/largeimage_1A.jpg" height="585" width="800"class="img-centered" alt=""/>
                        </div>
                        <div class="modal-body lazy_load">
                            <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-src="images/largeimage_1A.jpg" height="585" width="800"class="img-centered" alt=""/>
                        </div>
                        <div class="modal-body lazy_load">
                            <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-src="images/largeimage_1A.jpg" height="585" width="800"class="img-centered" alt=""/>
                        </div>
                    </div>
                </div>
            </div>

                <div class="close-lower" data-dismiss="modal">
                <IMG SRC="images/close.jpg" WIDTH="85" HEIGHT="32"></a>
                </div>
            </div>
        </div>
</div>

【问题讨论】:

    标签: javascript jquery lazy-loading bootstrap-modal


    【解决方案1】:

    首先,将lazy_load 类放在img 元素上,而不是放在父div 上。其次,你需要的 jQuery 是这样的:

    $('.portfolio-modal').on("show.bs.modal", function () {
        $('.lazy_load').each(function(){
            var img = $(this);
            img.attr('src', img.data('src'));
        });
    });          
    

    注意事项:

    1. 使用portfolio-modal 类来识别模式。
    2. 使用 jQuery data() 方法让图像延迟加载。

    【讨论】:

    • 我已经完全按照您发布的方式替换了 js,并将 '.lazy_load' 类移到了 字符串的末尾( )。页面加载非常快,占位符图像加载,但“src”图像仍然不能替换它们。我想知道 bootstrap.js 中是否存在与此冲突的内容,或者“show.bs.modal”函数是否不是这里的方法(尽管从逻辑上讲它应该是......)
    • @evanonearth 这对我来说很好用,这里有一个例子:bootply.com/7kS6Ube98u
    • 太棒了!这现在有效。谢谢!我在标题中的 javascript 上方有 jquery 的脚本标记,我认为这就是问题所在。 Javascript 需要放在首位。
    猜你喜欢
    • 1970-01-01
    • 2020-06-29
    • 1970-01-01
    • 2017-01-30
    • 1970-01-01
    • 1970-01-01
    • 2019-02-04
    • 2023-03-22
    • 1970-01-01
    相关资源
    最近更新 更多