国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

微信小程序圖片自適應支持多圖實例詳解

2019-11-19 16:17:36
字體:
來源:轉載
供稿:網友

微信小程序圖片自適應支持多圖實例詳解

微信小程序圖片自適應,是一個比較常見的需求,平時我們在WEBView中,只需要設置max-width:100%.在微信里面雖然widthFix也能實現,但有一個缺陷就是圖片的寬度值要大于或者等于設定的值,否則就會發生拉伸變形,本文通過另外一種來適應。

首先我們來看看圖片組件給的一些說明:

屬性名 類型 默認值 說明
src String 圖片資源地址
mode String 'scaleToFill' 圖片裁剪、縮放的模式
binderror HandleEvent 當錯誤發生時,發布到 AppService 的事件名,事件對象event.detail = {errMsg: 'something wrong'}
bindload HandleEvent 當圖片載入完畢時,發布到 AppService 的事件名,事件對象event.detail = {height:'圖片高度px', width:'圖片寬度px'}

注:image組件默認寬度300px、高度225px

mode 有 13 種模式,其中 4 種是縮放模式,9 種是裁剪模式。

模式 說明
scaleToFill 不保持縱橫比縮放圖片,使圖片的寬高完全拉伸至填滿 image 元素
aspectFit 保持縱橫比縮放圖片,使圖片的長邊能完全顯示出來。也就是說,可以完整地將圖片顯示出來。
aspectFill 保持縱橫比縮放圖片,只保證圖片的短邊能完全顯示出來。也就是說,圖片通常只在水平或垂直方向是完整的,另一個方向將會發生截取。
widthFix 寬度不變,高度自動變化,保持原圖寬高比不變

如果說要有一種比較合適的方案,大概是widthFix,然而上面這些模式中,所要求的前提是需要給圖片標簽設定一個寬度值或者一個高度值。但有時候我們根本不想限定圖片的寬高,我們需要的是圖片自身能夠根據自身的大小來適配。

而widthFix模式就要求你必須先設定一個寬度值,如果出來的圖片比給定的width小呢?此時圖片則會發生拉伸的現象。(常見應用在文章中,因為文章中的插圖有可能比默認的寬小,比如常見的表情)。

其實上面的標簽中,圖片為我們預留了一個函數bindLoad。下面看看我是怎么支持自適應的。

有一個前提,就是多圖的時候,你需要知道這個圖片是處于所有中的位置index,我們通過這個位置來保存圖片的寬度和高度。

<image src="http://ww4.sinaimg.cn/bmiddle/006q8Q6bjw1fbwucs1cctj30t80t8myh.jpg" bindLoad="imageLoad" style="width:{{imageSize[0].width}}rpx; height:{{imageSize[0].height}}rpx" data-index="0" mode="scaleToFill"/><image src="http://ww4.sinaimg.cn/bmiddle/006q8Q6bjw1fbwucs1cctj30t80t8myh.jpg" bindLoad="imageLoad" style="width:{{imageSize[1].width}}rpx; height:{{imageSize[1].height}}rpx" data-index="1" mode="scaleToFill"/>
var px2rpx = 2, windowWidth=375;page({  data:{    imageSize:{}  },  onLoad:function(options){    wx.getSystemInfo({     success: function(res) {      windowWidth = res.windowWidth;      px2rpx = 750 / windowWidth;     }    })  },  imageLoad:function(e){    //單位rpx    var originWidth = e.detail.width*px2rpx,     originHeight = e.detail.height*px2rpx,    ratio = originWidth/originHeight;    var viewWidth = 710,viewHeight//設定一個初始寬度    //當它的寬度大于初始寬度時,實際效果跟mode=widthFix一致    if(originWidth>= viewWidth){      //寬度等于viewWidth,只需要求出高度就能實現自適應      viewHeight = viewWidth/ratio;    }else{      //如果寬度小于初始值,這時就不要縮放了      viewWidth = originWidth;      viewHeight = originHeight;    }    var imageSize = this.data.imageSize;    imageSize[e.target.dataset.index] = {      width:viewWidth,      height:viewHeight    }    this.setData({      imageSize:imageSize    })  }})

如果我們的圖片中不僅限定了寬度,還限定了高度值,比如我們限定max-height之類的。那我們的imageLoad函數則要調整為根據他們的寬高比來輸出。

imageLoad:function(e){  var originWidth = e.detail.width * px2rpx,  originHeight=e.detail.height *px2rpx,  ratio = originWidth/originHeight ;  var viewWidth = 220,viewHeight = 165, viewRatio = viewWidth/viewHeight;  if(ratio>=viewRatio){    if(originWidth>=viewWidth){      viewHeight = viewWidth/ratio;    }else{      viewWidth = originWidth;      viewHeight = originHeight    }  }else{    if(originWidth>=viewWidth){      viewWidth = viewRatio*originHeight    }else{      viewWidth = viewRatio*originWidth;      viewHeight = viewRatio*originHeight;    }  }  var image = this.data.imageSize;  image[e.target.dataset.index]={    width:viewWidth,    height:viewHeight  }  this.setData({  imageSize:image})},

附錄:小圖預覽,進入全屏模式。

用預覽圖片的API,wx.previewImage(OBJECT)以下是對應的代碼,樣式部分,自行布局。

HTML代碼:

<view class="wrap"> <image wx:for="{{pictures}}" wx:key="unique" src="{{item}}" data-index="{{index}}" bindtap="previewImage"></image></view>

JS

Page({ data: {  pictures: [   'https://p0.meituan.net/movie/ea4ac75173a8273f3956e514a4c78018253143.jpeg',   'https://p0.meituan.net/movie/5d4fa35c6d1215b5689257307c461dd2541448.jpeg',   'https://p0.meituan.net/movie/0c49f98a93881b65b58c349eed219dba290900.jpg',   'https://p1.meituan.net/movie/45f98822bd15082ae3932b6108b17a01265779.jpg',   'https://p1.meituan.net/movie/722de9a7b0c1f9c262162d87eccaec7c451290.jpg',   'https://p0.meituan.net/movie/cb9be5bbedb78ce2ef8e83c93f83caca474393.jpg',   'https://p1.meituan.net/movie/a852b992cdec15319c717ba9fa9b7a35406466.jpg',   'https://p1.meituan.net/movie/dc1f94811793e9c653170cba7b05bf3e484939.jpg'  ] }, previewImage: function(e){  var that = this,    index = e.currentTarget.dataset.index,    pictures = this.data.pictures;  wx.previewImage({   current: pictures[index],   urls: pictures  }) }})

 感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 武隆县| 石阡县| 安泽县| 玉林市| 吴桥县| 花莲市| 鹤峰县| 海南省| 开封县| 丽水市| 龙陵县| 广东省| 新津县| 台江县| 万山特区| 读书| 岢岚县| 克山县| 东乡县| 饶阳县| 雅安市| 攀枝花市| 循化| 襄垣县| 云龙县| 湘乡市| 高碑店市| 拉萨市| 屏边| 彭州市| 博罗县| 涞水县| 宁津县| 大渡口区| 高州市| 云南省| 静乐县| 迭部县| 浮山县| 瑞昌市| 张家港市|