Vue中图片问题合集

目录

1.背景

2.版本

3.问题集

1)Vue中使用图片不显示

2)Vue上传文件第一次触发,第二次不触发

3)使用Swiper时,图片动态返回

4)轮播图的循环播放失效


1.背景

在使用Vue+ElementUI进行前端工程开发中,遇到一些图片的问题,包括上传、回显等。这里做一些记录,方便以后查看

2.版本

npm6.14.12
vue-admin-template4.4.0
axios0.18.1
element-ui2.13.2

vue-awesome-swiper

^3.1.3

3.问题集

1)Vue中使用<img :src="...">图片不显示

解决方法:使用require()

这里,item为后台接口返回的一个对象,包含有url属性,即图片链接。

// 若后台未返回url,则使用默认图片
<img :src="item.url?item.url:require('@/assets/default.jpeg')" />

参考:

Vue <img :src=""/> 图片不显示 - 大毛啊 - 博客园

Vue中img的动态src不显示图片_花铛-CSDN博客

Vue 中img图片加载失败解决方案 - des杜甫 - 博客园

2)Vue上传文件第一次触发,第二次不触发

解决方法:在上传的事件中,清空一下file即可

  methods: {
    handleAvatarSuccess(response, file) {
      if (/*"上传成功的判定条件"*/) {
        this.$message({
          showClose: true,
          message: "上传成功!",
          type: 'success'
        });
      }else{
        this.$message({
          showClose: true,
          message: "上传失败!",
          type: 'error'
        });
      }
      file = "";          // 这里清空一下      
    },

  ...

}

参考:Vue上传文件或图片第一次触发,第二次不触发的问题_Kino的博客-CSDN博客

3)使用Swiper时,图片动态返回

使用vue-awesome-swiper对banner进行自动播放。一开始图片是固定的两张,后来改为从后台接口获取,这样可以将banner所用的图片管理起来

<swiper :options="swiperOption" v-if="banners.length">
  <swiper-slide
    v-for="item in banners"
    :key="item.sort"        // banner中的播放顺序由后台定义的sort字段决定
    :style="{
      backgroundImage: 'url(' + item.imageUrl + ')',
      backgroundPosition: 'center center',
      backgroundSize: 'cover',
    }"
  >
</swiper-slide>

...

export default {
  data() {
    return {
      banners: [],        // 给返回值定义一个变量
      swiperOption: {
        spaceBetween: 8,
        loop: true,
        centeredSlides: true,
        navigation: {
          nextEl: ".swiper-button-next",
          prevEl: ".swiper-button-prev",
        },
        pagination: {
          el: ".swiper-pagination",
          clickable: true,
        },
        autoplay: {
          delay: 5000,
          disableOnInteraction: false
        },
      },
      swiperList: this.banners,        // 引用定义的变量
      // 原先固定的两张图片
      // [
      // {
      //   imageUrl: require("~/assets/photo/banner1.png"),
      // },
      // {
      //   imageUrl: require("~/assets/photo/banner2.png"),
      // },
      // ],
    };
  },

参考:

vue-awesome-swiper使用自动轮播和循环轮播不生效(loop和autoplay) - lezuw - 博客园 

vue中使用swiper-slide时,循环轮播失效?

4)轮播图的循环播放失效

解决方案:增加v-if属性。代码如上一示例

v-if="banners.length"
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值