当前位置: 首页 > 知识库问答 >
问题:

在Vue/Laravel中延迟加载图像

饶高雅
2023-03-14

我试图使用jQuery懒惰加载在我的Laravel/Vue项目,但我正在努力让图像出现在我的Vue组件。我有以下img块,我认为会工作:

<img v-if="vehicle.photo_path != null" :data-original="'/storage/vehicles/' + vehicle.photo_path" class="lazy" height="180" width="150"/>

我确实在这里发现了另一个问题-Vue.js模板中的静态图像src-但是当我尝试该方法时,我得到了这样的结果:属性内部的插值已被删除。改用v-bind或冒号速记。

因此,我切换回v-bind方法,但我得到的只是一个带有灰色边框的白色框-没有图像。但是,如果我在src属性上使用v-bind,我可以正确地看到图像。

我知道我已经正确地实现了懒惰加载插件,因为我可以在我的网站上的其他地方成功地调用它(例如在刀片视图上),但我不确定我哪里出错了。谢谢你。

共有2个答案

狄凯
2023-03-14

我在网上发现了很多模块,但我喜欢尽量避免使用模块。所以我想出了另外一个办法,我不知道它是否是最好的,但它很有效,而且我没有看到任何性能损失,我在页面加载时懒散地加载所有图像。如果你有很多的话,你可能更喜欢滚动,但我想如果我的答案适合你的需要,你会发现这一点的。

您将需要vueX来完成此操作,但我将避免设置,因为这并不是对您问题的回答。

如果像我一样,你有某种Index.vue组件,它的主要用法是启动所有的子组件(例如,我用vue-router来做),在其中放置一个挂载()函数:

mounted(){
    const ctx = this;

    // You could use this method, but if you reload the page, the cache of the browser won't allow your JS to trigger .onload method, so better use what's after.
    /*window.onload = function(){
        console.log('page loaded, can load images');
        ctx.$store.dispatch('setPageLoaded', true);
    }*/

    let interval = setInterval(function() {
        if(document.readyState === 'complete') {
            clearInterval(interval);
            ctx.$store.dispatch('setPageLoaded', true);
        }
    }, 100);
}

=

然后,在任何要延迟加载映像的组件中,只需使用2个computed(我使用了包含在组件中的mixin,以避免重复某些代码):

computed: {
    page_loaded(){
        return this.$store.getters.getPageLoaded;
    },
    image(){
        if(this.page_loaded){
            console.log('starting loading image');

            if(this.product.picture){
                return resizedPicture(this.product.picture, this.width, this.height);
            }else if(this.product.hasOwnProperty('additional_pictures') && this.product.additional_pictures.length){
                return resizedPicture(this.product.additional_pictures[0], this.width, this.height);
            }

            return '';
        }
    }
}

page\u loaded()目标是返回我提到的存储页面加载变量。

image()目标是实际加载图像。

我将其用于内联CSS背景图像属性,因此我的HTML如下所示:

<span v-if="page_loaded" class="image" :style="'background-image:url('+image+')'" :width="1200" :height="900"></span>

我希望它能有所帮助,但是正如我所说的,如果它没有优化,请随时告诉我。

陈野
2023-03-14

尝试将对$(“img.lazy”).lazyload()的调用移动到Vue实例上的mounted()方法中。我刚刚在Vue和jQueryLazyload上遇到了一个类似的问题,这为我解决了这个问题。例如:

var app = new Vue({
    el: ...
    data() ...
    computed: ... 
    methods: ...
    mounted() {
        $("img.lazy").lazyload()
    }
})
 类似资料:
  • Flask 通常配合装饰器使用,装饰器使用非常简单,而且使您可以将 URL 和处理它的函数 放在一起。然而这种方法也有一种不足: 这就意味着您使用装饰器的代码必须在前面导入, 否则 Flask 将无法找到您的函数。 这对于需要很快导入的应用程序来说是一个问题,这种情况可能出现在类似谷歌的 App Engine 这样的系统上。所以如果您突然发现您的引用超出了这种方法可以处理 的能力,您可以降级到中央

  • 我正在使用Mika Tuupola的jQuery延迟加载。 是否可以在每次延迟加载图像后调用函数。 我打算做的是跟踪图像的浏览次数。因此,如果图像是延迟加载的,这意味着用户已经看到了图像,我将通过在后台执行HTTP GET,将数据库中的计数器增加1。

  • 我想做一个reactjs页面懒惰加载图像。因此,我调用lazyLoadImages()内部的组件didMount()。我发现位于浏览器选项卡的浏览器加载指示器仍然一路旋转,直到加载所有图像。这让我认为我所做的并没有提供真正的懒惰加载图像体验。 有趣的是,如果我在setTimeout中用一个不太短的timeout参数包装lazyLoadImages(),例如100ms(不是0或甚至50ms),那么页

  • 描述 (Description) 延迟加载可应用于图像,背景图像和淡入效果,如下所述 - 对于图像 要在图像上使用延迟加载,请按照给定的步骤进行操作 - 使用data-src属性而不是src属性来指定图像源。 将类lazy添加到图像。 <div class = "page-content"> ... <img data-src = "image_path.jpg" class = "l

  • 问题内容: 我正在开发一个eshop。在基于类别的产品页面上,我放置了一些基于javascript的过滤器。但是,如果类别具有很多产品,则会出现问题。该链接具有与我相似的功能… 这个页面多么缓慢,却超过2mb !!! 对我来说,每个产品都需要一半的K字节,但是图像是个问题。.因此,我正在寻找如何延迟加载图像的方法。由于与该网站不同,我的页面具有分页功能,因此我认为加载仅对页面可见的图像是一种解决方

  • 问题内容: 我在JPA实体中的延迟加载属性有问题。我读过许多类似的问题,但它们与spring或hibernate有关,并且他们的后代不适用或没有帮助。 该应用程序是在Wildfly应用程序服务器上运行的JEE和JPA2.1。有两个实体,DAO会话bean和servlet将它们放在一起: 当我运行此代码时,它失败并显示: 我对WebLogic / JPA1使用了非常相似的模式,并且运行平稳。任何的想