微信小程序之swiper組件刪除上傳圖片空白問題

這個不知道是不是微信小程序官方的問題,簡單描述一下遇到的問題:在使用swiper組件來預(yù)覽顯示用戶上傳的多張圖片后,右上角有一個可以刪除圖片的按鈕,用戶可以點擊刪除符號刪除上傳的圖片。重點是順時針點擊刪除圖片和刪除中間的指定圖片,都其余圖片顯示沒問題。唯獨刪除最后一張圖片,問題就來了,排序前面的圖片顯示不出來(空白);但是可以查到圖片組件還有圖片地址的???(真機環(huán)境也測試過,問題效果是一樣的)

(一)問題詳情

1、問題效果圖:


上傳圖片及刪除操作問題.gif

上傳了三張圖片,通過swiper組件顯示出來,右上角的是刪除符號操作,右邊中間數(shù)字是當(dāng)前索引值;
首先是點擊刪除第一張圖片,后面圖片正常顯示并將第二張圖片歸為第一張,索引值也變?yōu)?;(三張圖片變?yōu)閮蓮垼?br> 再次點擊刪除的是兩張圖片中的第二張(索引值為1的),結(jié)果剩下顯示的一張圖片,為空白,查了圖片地址顯示沒問題;如圖:


刪除圖片顯示問題

(二)問題分析

通過網(wǎng)上找資料和嘗試排錯,原來是小程序組件的屬性這個問題導(dǎo)致的。

因為使用的是swiper組件,會有一個屬性:current 表示當(dāng)前所在滑塊的 index值,默認(rèn)為0,類型為Number;
也就是說,當(dāng)你刪除圖片的時候,current不會改變,就是說:本來有三張圖片的圖片數(shù)組,默認(rèn)顯示第一張的話,current='0';當(dāng)刪除第一張圖片后,圖片數(shù)組會發(fā)生變化,但current='0'是不變的,只要圖片數(shù)組有值就會默認(rèn)顯示圖片數(shù)組第一張圖片(正常顯示);

所以,(三張圖片的圖片數(shù)組)當(dāng)前顯示第二張,current='1';如果你刪除第二張后,圖片數(shù)組還有兩張,就會顯示原來是第三張的圖片(當(dāng)前顯示的索引值為1),當(dāng)你再刪除當(dāng)前這一張圖片后,current='1'還是不變,但圖片數(shù)組只有一張(索引值為0),就是索引值不存在了。
嗯嗯,就是這樣,這就是為什么從后面刪除數(shù)組圖片(逆時針)時會導(dǎo)致顯示空白的,但圖片地址存在的問題。

(三)解決方法

1、動態(tài)設(shè)置swiper組件的屬性current值:
swiperCurrentIndex默認(rèn)為0

      <swiper autoplay='false' current='{{swiperCurrentIndex}}' indicator-dots='true' circular='true' bindchange='goSettingCurrentIndex'>

2、swiper組件要設(shè)置bindchange觸發(fā)事件(current 改變時會觸發(fā) change 事件),主要是防止用戶是逆時針刪除圖片所導(dǎo)致的現(xiàn)象:

    let that = this;
    that.setData({
      swiperCurrentIndex: e.detail.current
    })

3、點擊刪除圖片的操作:(這里有個注意點,就是data的數(shù)組值的長度會跟被賦值的arrayImg裁剪后的長度一樣,這個不是簡單賦值操作哈)

    let that = this;
    let index = e.currentTarget.dataset.index;
    let arrayImg = that.data.defaultAddImg;
    arrayImg.splice(index, 1);
    if (arrayImg.length == 0) {
      // 圖片已經(jīng)刪除完了
      that.setData({
        isShowUploadImgs: false, //顯示上傳圖片按鈕
      })
    } else {
      // 還有圖片
      if (arrayImg.length == index) {
        // 判斷用戶刪除的圖片是不是圖片數(shù)組內(nèi)的最后一張,是則將swiper的current值為圖片數(shù)組長度減一,可以保證顯示上一張圖片
        console.log('123');
        that.setData({
          defaultAddImg: arrayImg,
          swiperCurrentIndex: that.data.defaultAddImg.length - 1
        })
      } else {
        // 刪除的圖片不是圖片數(shù)組內(nèi)的最后一張,這樣可以保證當(dāng)前顯示下一張圖片
        console.error('刪除的圖片不是圖片數(shù)組內(nèi)的最后一張');
        that.setData({
          defaultAddImg: arrayImg
        })
      }

    }

需要完整示例的可以私聊或留言,這個是工作中遇到的問題,暫時不方便放完整代碼哈。
歡迎訪問我的CSDN博客了解更多哈。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容