使用背景图的方式,实现图片路径不正确,展示默认图片

上一篇文章讲的是使用 img标签自带的onerror方法来实现图片路径不正确,展示默认图片

这边呢,来教大家使用背景图的方式实现 路径不正确时,展示默认图片

这次的需求是,图片需要位于圆角父盒子的正中间,但是图片的长宽跟盒子是不匹配的,图片不能进行拉伸,没被图片遮挡的父盒子是黑色的底色

用上一篇的那个方法就会导致一个问题,出现一个跟盒子大小一样的浅色图片时,盒子会有点黑色的边,因为图片挡不住圆角父盒子的那一点点的圆角边

所以这种情况下,使用背景图,就不会出现这些问题了

<div 
  v-for="item in list" 
  :key="item.id">

    <div 
      class="img"
      :style="{backgroundImage: item.backgroundImage}">
    </div>

</div>


<script>

  import noneImg from './images/noneImg.png'
  
  export default {

    data() {
      noneImg,
      list: []
    },

    methods: {
       // 生成 img 
      handleLoadImg(url) {
        return new Promise((resolve, reject) => {
          if (!url) {
            reject()
          }
          const elImg = new Image()

          elImg.onload = function() {
            resolve(`url(${url})`)
          }
          
          elImg.onerror = function() {
            reject()
          }
          
          elImg.src = url

        })
      },
      
      // 调接口
      getList() {
        getList().then(res => {
          this.list = res.data.data.map(item => {
            return {
              ...item,
              backgroundImage: 'none'
            }
          })
          this.list.forEach((item, index, self) => {
            // 在这里进行调用
            this.handleLoadImg(item.url).then(res => {
              self[index].backgroundImage = res  // 返回正确时,把当前路径进行赋值
            },()=>{
              self[index].backgroundImage = `url(${this.noneImg})`  // 返回错误时,默认图片赋值进去
            })
          })
        })
      }
    }

</script>

<style lang="less" scoped>
  .img {
    width: 200px;
    height: 150px;
    background-color: #000;
    background-repeat: no-repeat;
    background-position: 50% 0;
    background-size: auto 100%;
  }

</style>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值