今天在開發西奧程序過程中,遇到一個問題,圖片加載失敗的時候頁面,顯示空白比較難看,需求是希望再圖片加載失敗的時候,顯示加載失敗的圖片,剛開始也查了一番,沒有找到類似的方法,最終自己翻看MDN看到了img的onerror屬性,抱着測試的心里,最終解決了自己的問題;在這里記錄下來,希望能幫到大家。
下面是處理前和處理后的效果:
<view class="container"> <block wx:for="{{imgUrls}}" wx:key="index"> <image src="{{item}}" onerror="imgOnerror" data-idx="{{index}}"></image> </block> </view>
.container { display: flex; flex-wrap: wrap; padding: 30rpx 30rpx 10rpx; box-sizing: border-box; } .container > image { width: 156rpx; height: 156rpx; background: pink; margin: 0 20rpx 20rpx 0; display: block; } .container > image:nth-of-type(4n) { margin-right: 0; }
Page({ /** * 頁面的初始數據 */ data: { imgUrls: [ 'https://images.unsplash.com/photo-1551334787-21e6bd3ab135?w=640', 'https://images.unsplash.com/photo-1551214012-84f95e060dee?w=640', 'https://images.unsplash.com/photo-1551214012-84f95e060dee?w=640', 'https://images.unsplash.com/photo-1551446666-142875a901a1?w=770', 'https://images.unsplash.com/photo-1551334787-21e6bd3ab135?w=640', 'https://images.unsplash.com/photo-1551334787-21e6bd3ab135?w=640', 'https://images.unsplash.com/photo-1551214012-84f95e060dee?w=640', 'https://images.unsplash.com/photo-1551446666-142875a901a1?w=880', ], //第四和第八張圖片是無效的 }, /** * 圖片加載失敗處理函數 */ imgOnerror(e) { var idx = e.currentTarget.dataset.idx; console.log(idx) var _imgUrls = this.data.imgUrls; for (var i = 0; i < _imgUrls.length; i++) { if (i == idx) { _imgUrls[i] = 'https://images.unsplash.com/photo-1551446591-142875a901a1?w=640' } } this.setData({ imgUrls: _imgUrls }) }, /** * 生命周期函數--監聽頁面加載 */ onLoad: function (options) { }, /** * 生命周期函數--監聽頁面初次渲染完成 */ onReady: function () { }, /** * 生命周期函數--監聽頁面顯示 */ onShow: function () { }, /** * 生命周期函數--監聽頁面隱藏 */ onHide: function () { }, /** * 生命周期函數--監聽頁面卸載 */ onUnload: function () { }, /** * 頁面相關事件處理函數--監聽用戶下拉動作 */ onPullDownRefresh: function () { }, /** * 頁面上拉觸底事件的處理函數 */ onReachBottom: function () { }, /** * 用戶點擊右上角分享 */ onShareAppMessage: function () { } })