代码之家  ›  专栏  ›  技术社区  ›  chinloyal

Vue的图像加载问题

  •  1
  • chinloyal  · 技术社区  · 6 年前

    这个问题可能不是针对Vue的,但这里是…

    我正在搜索一些项目并从数据库中检索它们,每个项目都有一个唯一的名称,我使用该名称从外部网站加载它们的图像,例如:

    <img :src="'https://external-site.com/photos/' + item.name + '.jpg'" />
    

    每当我搜索第一个项目时,它会返回带有图像和详细信息的项目。但每当我搜索第二个项目时,它都会返回正确的详细信息,但会使用最后一个项目的缓存图像,直到加载了它自己的图像。

    我决定在加载前使用图像上的一些事件来显示加载程序,但我只发现有三个特定于图像的事件: onabort ,请 onerror , onload .

    但我需要一个事件来显示一个加载程序在下载图像的开始。如果没有,还有其他方法可以解决这个问题吗?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Jim B.    6 年前

    破坏缓存的一个常见技巧是向URL添加一个无害的更改参数,例如时间戳:

    <img :src="'https://external-site.com/photos/' + item.name + '.jpg?x=' + Date.now()" />
    

    参数 不应该 干扰访问图像,但浏览器不会假定URL相同。

        2
  •  0
  •   chinloyal    6 年前

    我通过使用Vue进行图像渲染解决了这个问题:

    首先我安装了一个包,它给了我一个 v-lazy-image 组件通过 npm i v-lazy-image 然后我导入了组件

    <script>
    import VLazyImage from "v-lazy-image";
    
    export default {
      components: {
        VLazyImage
      }
    };
    </script>
    

    然后,该组件允许您指定要在加载图像时使用的图像和占位符图像:

    <v-lazy-image
      :src="'https://external-site.com/photos/' + item.name + '.jpg'"
      src-placeholder="/images/default.jpg"
      />
    

    您可以看到此组件的更多详细信息 here