微信小程序圖片自適應(yīng)實(shí)現(xiàn)解析
這篇文章主要介紹了微信小程序圖片自適應(yīng)實(shí)現(xiàn)解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
關(guān)于微信小程序圖片自適應(yīng)的做法
在日常業(yè)務(wù)場景中,很多地方都需要圖片進(jìn)行列表的顯示,但是這樣就存在一個(gè)問題,由于每張上傳的圖片規(guī)格并不是一樣的,就會(huì)發(fā)生圖片要么過大,要么過小,或者被拉伸的情況,如下圖
對于這個(gè)情況,我的思路是可以使用image標(biāo)簽內(nèi)的bindload屬性進(jìn)行計(jì)算,bindload屬性的介紹如下
下面就是具體的方法流程
1、首先我們在頁面上進(jìn)行布局,只需要給image標(biāo)簽的view容器添加寬高即可,并使用wx:for進(jìn)行遍歷渲染,通過自定義屬性data-i傳入索引值,容器我同時(shí)也加入了動(dòng)態(tài)屬性,就是為了計(jì)算后圖片不會(huì)超出整個(gè)容器的大小導(dǎo)致布局的錯(cuò)亂
<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中定義模擬數(shù)據(jù),并定義image屬性空對象,用該對象通過key值放入相對應(yīng)下標(biāo)的圖片寬高屬性
page({ data:{ list_1: [{ url: '../../img/1.jpg' }, { url: '../../img/2.jpg' }, { url: '../../img/3.jpg' }, { url: '../../img/4.jpg' }], imgmsg:{} } })
3、添加imageLoad方法去進(jìn)行圖片大小的計(jì)算,這里我們可以通過wx.createSelectorQuery()方法去獲取圖片容器的寬高,通過事件對象可以獲取圖片原始寬高,具體方法如下
//顯示圖片自適應(yīng) imageLoad(e) { //獲取小程序節(jié)點(diǎn)屬性的api const query = wx.createSelectorQuery() var imgw = e.detail.width, //圖片原始寬度 imgh = e.detail.height, //圖片原始高度 index = e.currentTarget.dataset.i, //圖片下標(biāo) 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; //由于圖片的大小不一定,可能寬高都會(huì)超出整個(gè)圖片容器,因此這里多用了圖片本身的寬高進(jìn)行的判斷 if (imgw > imgh || imgw > viewW) { //當(dāng)圖片自身的寬大于圖片自身的高,將圖片的寬等于容器的寬,去計(jì)算圖片的高 imgw = viewW; imgh = imgw / ratio; } else if (imgw < imgh || imgh > viewH) { //當(dāng)圖片自身的寬小于圖片自身的高,將圖片的高等于容器的高,去計(jì)算容器的寬 imgw = viewH * ratio; imgh = viewH; } //把圖片計(jì)算后的寬高屬性根據(jù)下標(biāo)存入到對象中,并使用math的floor方法取整 image[index] = { width: Math.floor(imgw), height: Math.floor(imgh) } //更新視圖 that.setData({ imgmsg: image }) }) query.exec() },
好了,到這里,我們可以看下具體的結(jié)果了
簡單的列表圖片自適應(yīng)功能實(shí)現(xiàn)了,但是這個(gè)方法還能進(jìn)行擴(kuò)展和優(yōu)化,如果有好的想法可以一起學(xué)習(xí)交流,共同提高
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
javascript模擬鼠標(biāo)點(diǎn)擊事件原理和實(shí)現(xiàn)方法
本文詳細(xì)介紹了JS模擬鼠標(biāo)點(diǎn)擊事件的原理以及應(yīng)用場景,并提供了模擬鼠標(biāo)左鍵點(diǎn)擊事件、右鍵點(diǎn)擊事件、滾輪事件和移動(dòng)事件的代碼實(shí)現(xiàn),了解JS模擬鼠標(biāo)點(diǎn)擊事件的原理和實(shí)現(xiàn)方法對于開發(fā)人員非常重要,這對于許多面向用戶的web應(yīng)用程序的開發(fā)和測試都具有很重要的意義2023-09-092020淘寶618理想生活列車自動(dòng)領(lǐng)喵幣js腳本的代碼
這篇文章主要介紹了2020淘寶618理想生活列車自動(dòng)領(lǐng)喵幣腳本,需要先安裝 auto.js腳本,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06前端學(xué)習(xí)筆記style,currentStyle,getComputedStyle的用法與區(qū)別
這篇文章主要介紹了前端學(xué)習(xí)筆記style,currentStyle,getComputedStyle的用法與區(qū)別,需要的朋友可以參考下2016-05-05JavaScript實(shí)現(xiàn)設(shè)置默認(rèn)日期范圍為最近40天的方法分析
這篇文章主要介紹了JavaScript實(shí)現(xiàn)設(shè)置默認(rèn)日期范圍為最近40天的方法,結(jié)合實(shí)例形式分析了javascript結(jié)合HTML5 date元素進(jìn)行時(shí)間運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下2017-07-07JavaScript改變HTML元素的樣式改變CSS及元素屬性
改變CSS及元素屬性的方法有很多,在本文將為大家介紹下使用js是如何做到的,感興趣的朋友可以感受下2013-11-11uni-app開發(fā)微信小程序之H5壓縮上傳圖片的問題詳解
這次項(xiàng)目中做了一個(gè)圖片上傳,要求是大于2MB的就壓縮成2MB一下的再上傳,下面這篇文章主要給大家介紹了關(guān)于uni-app開發(fā)微信小程序之H5壓縮上傳圖片的問題,需要的朋友可以參考下2023-03-03