全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

微信小程序图片自适应支持多图实例详解

微信小程序图片自适应支持多图实例详解

微信小程序图片自适应,是一个比较常见的需求,平时我们在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
  })
 }
})

 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# 微信小程序图片自适应支持多图  # 小程序  # 图片自适应  # 微信小程序实现富文本图片宽度自适应的方法  # 微信小程序之swiper轮播图中的图片自适应高度的方法  # 微信小程序实现image组件图片自适应宽度比例显示的方法  # 微信小程序 图片宽度自适应的实现  # 微信小程序实现图片自适应(支持多图)  # 微信小程序 图片等比例缩放(图片自适应屏幕)  # 微信小程序图片自适应实现解析  # 自适应  # 只需要  # 求出  # 多图  # 有一个  # 的是  # 是一个  # 也就是说  # 我是  # 他们的  # 就会  # 就能  # 将会  # 有可能  # 也能  # 有一种  # 希望能  # 来看看  # 说要  # 只在 


相关文章: 如何正确选择百度移动适配建站域名?  如何在新浪SAE免费搭建个人博客?  如何快速查询网站的真实建站时间?  网站制作大概多少钱一个,做一个平台网站大概多少钱?  建站主机与服务器功能差异如何区分?  全景视频制作网站有哪些,全景图怎么做成网页?  如何解决VPS建站LNMP环境配置常见问题?  高防服务器:AI智能防御DDoS攻击与数据安全保障  如何快速使用云服务器搭建个人网站?  建站之星在线版空间:自助建站+智能模板一键生成方案  南宁网站建设制作定制,南宁网站建设可以定制吗?  如何在阿里云通过域名搭建网站?  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  如何在Windows虚拟主机上快速搭建网站?  打鱼网站制作软件,波克捕鱼官方号怎么注册?  建站之星IIS配置教程:代码生成技巧与站点搭建指南  如何通过免费商城建站系统源码自定义网站主题与功能?  专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?  c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】  如何用已有域名快速搭建网站?  如何快速上传自定义模板至建站之星?  网站微信制作软件,如何制作微信链接?  ,购物网站怎么盈利呢?  网站按钮制作软件,如何实现网页中按钮的自动点击?  如何快速打造个性化非模板自助建站?  如何用AWS免费套餐快速搭建高效网站?  建站之星如何快速生成多端适配网站?  香港服务器租用费用高吗?如何避免常见误区?  建站之星如何配置系统实现高效建站?  如何快速搭建虚拟主机网站?新手必看指南  制作网站的过程怎么写,用凡科建站如何制作自己的网站?  如何基于PHP生成高效IDC网络公司建站源码?  建站之星在线客服如何快速接入解答?  如何用IIS7快速搭建并优化网站站点?  网站建设设计制作营销公司南阳,如何策划设计和建设网站?  建站主机默认首页配置指南:核心功能与访问路径优化  如何选择美橙互联多站合一建站方案?  建站主机核心功能解析:服务器选择与网站搭建流程指南  Python lxml的etree和ElementTree有什么区别  制作电商网页,电商供应链怎么做?  清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?  浅谈Javascript中的Label语句  香港服务器WordPress建站指南:SEO优化与高效部署策略  小型网站制作HTML,*游戏网站怎么搭建?  上海网站制作网站建设公司,建筑电工证网上查询系统入口?  建站之星如何快速解决建站难题?  如何在腾讯云服务器快速搭建个人网站?  ,网站推广常用方法?  ,怎么在广州志愿者网站注册?  css网站制作参考文献有哪些,易聊怎么注册? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。