仅在Bootstrap模式打开后才延迟加载映像

eva*_*rth 6 javascript jquery lazy-loading bootstrap-modal

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

样例代码:

/* 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>
Run Code Online (Sandbox Code Playgroud)

Dav*_*idG 7

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

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

笔记:

  1. 使用portfolio-modal该类来识别模态。
  2. 使用 jQuerydata()方法来延迟加载图像。