微信小程式圖片自適應實現解析
阿新 • • 發佈:2020-01-22
這篇文章主要介紹了微信小程式圖片自適應實現解析,文中通過示例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
關於微信小程式圖片自適應的做法
在日常業務場景中,很多地方都需要圖片進行列表的顯示,但是這樣就存在一個問題,由於每張上傳的圖片規格並不是一樣的,就會發生圖片要麼過大,要麼過小,或者被拉伸的情況,如下圖
對於這個情況,我的思路是可以使用image標籤內的bindload屬性進行計算,bindload屬性的介紹如下
下面就是具體的方法流程
1、首先我們在頁面上進行佈局,只需要給image標籤的view容器新增寬高即可,並使用wx:for進行遍歷渲染,通過自定義屬性data-i傳入索引值,容器我同時也加入了動態屬性,就是為了計算後圖片不會超出整個容器的大小導致佈局的錯亂
<block wx:for="{{list_1}}" wx:key="{{index}}"> <view class="top_img" style="width:{{imgmsg?imgmsg[index].width:''}}px;height:{{imgmsg?imgmsg[index].height:''}}px"> <image style="width:{{imgmsg[index].width}}px !important;height:{{imgmsg[index].height}}px !important;" src="{{item.url}}" bindload="imageLoad" data-i="{{index}}" /> </view> </block>
2、在js中定義模擬資料,並定義image屬性空物件,用該物件通過key值放入相對應下標的圖片寬高屬性
page({ data:{ list_1: [{ url: '../../img/1.jpg' },{ url: '../../img/2.jpg' },{ url: '../../img/3.jpg' },{ url: '../../img/4.jpg' }],imgmsg:{} } })
3、新增imageLoad方法去進行圖片大小的計算,這裡我們可以通過wx.createSelectorQuery()方法去獲取圖片容器的寬高,通過事件物件可以獲取圖片原始寬高,具體方法如下
//顯示圖片自適應 imageLoad(e) { //獲取小程式節點屬性的api const query = wx.createSelectorQuery() var imgw = e.detail.width,//圖片原始寬度 imgh = e.detail.height,//圖片原始高度 index = e.currentTarget.dataset.i,//圖片下標 ratio = imgw / imgh,//圖片寬高比 image = this.data.imgmsg,//圖片寬高的索引物件 that = this,viewW = null,//容器寬度 viewH = null;//容器高度 query.select('.top_img').boundingClientRect(function(res) { viewW = res.width; viewH = res.height; //由於圖片的大小不一定,可能寬高都會超出整個圖片容器,因此這裡多用了圖片本身的寬高進行的判斷 if (imgw > imgh || imgw > viewW) { //當圖片自身的寬大於圖片自身的高,將圖片的寬等於容器的寬,去計算圖片的高 imgw = viewW; imgh = imgw / ratio; } else if (imgw < imgh || imgh > viewH) { //當圖片自身的寬小於圖片自身的高,將圖片的高等於容器的高,去計算容器的寬 imgw = viewH * ratio; imgh = viewH; } //把圖片計算後的寬高屬性根據下標存入到物件中,並使用math的floor方法取整 image[index] = { width: Math.floor(imgw),height: Math.floor(imgh) } //更新檢視 that.setData({ imgmsg: image }) }) query.exec() },
好了,到這裡,我們可以看下具體的結果了
簡單的列表圖片自適應功能實現了,但是這個方法還能進行擴充套件和優化,如果有好的想法可以一起學習交流,共同提高
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。