codecamp

支付宝小程序媒体组件 图片·Image

图片。支持 JPG、PNG、SVG、WEBP(iOS 不支持动图)、GIF 等格式。

使用说明

使用 webview 嵌套 H5 时,若遇到图片资源不显示问题,可参考 配置 H5 白名单流程 获取 H5 页面中所有的域名地址(含图片静态资源的地址),全部加入域名白名单中。

扫码体验

示例代码

<!-- API-DEMO page/component/image/image.axml -->
<view class="page">
  <view class="page-description">图片</view>
  <view class="page-section" a:for="{{array}}" a:for-item="item">
    <view class="page-section-title">{{item.text}}</view>
    <view class="page-section-demo" onTap="onTap">
      <image class="image"
        data-name="{{item.mode}}"
        onTap="onTap"
        mode="{{item.mode}}" src="{{src}}" onError="imageError" onLoad="imageLoad" />
    </view>
  </view>
</view>
// API-DEMO page/component/image/image.js
Page({
  data: {
    array: [{
      mode: 'scaleToFill',
      text: 'scaleToFill:不保持纵横比缩放图片,使图片完全适应',
    }, {
      mode: 'aspectFit',
      text: 'aspectFit:保持纵横比缩放图片,使图片的长边能完全显示出来',
    }, {
      mode: 'aspectFill',
      text: 'aspectFill:保持纵横比缩放图片,只保证图片的短边能完全显示出来',
    }, {
      mode: 'widthFix',
      text: 'widthFix:宽度不变,高度自动变化,保持原图宽高比不变',
    }, {
      mode: 'top',
      text: 'top:不缩放图片,只显示图片的顶部区域',
    }, {
      mode: 'bottom',
      text: 'bottom:不缩放图片,只显示图片的底部区域',
    }, {
      mode: 'center',
      text: 'center:不缩放图片,只显示图片的中间区域',
    }, {
      mode: 'left',
      text: 'left:不缩放图片,只显示图片的左边区域',
    }, {
      mode: 'right',
      text: 'right:不缩放图片,只显示图片的右边边区域',
    }, {
      mode: 'top left',
      text: 'top left:不缩放图片,只显示图片的左上边区域',
    }, {
      mode: 'top right',
      text: 'top right:不缩放图片,只显示图片的右上边区域',
    }, {
      mode: 'bottom left',
      text: 'bottom left:不缩放图片,只显示图片的左下边区域',
    }, {
      mode: 'bottom right',
      text: 'bottom right:不缩放图片,只显示图片的右下边区域',
    }],
    src: '/image/ant.png',
  },
  imageError(e) {
    console.log('image 发生 error 事件,携带值为', e.detail.errMsg);
  },
  onTap(e) {
    console.log('image 发生 tap 事件', e);
  },
  imageLoad(e) {
    console.log('image 加载成功', e);
  },
});
/* API-DEMO page/component/image/image.acss */
.page-section-demo {
  display: flex;
  justify-content: space-around;
}
.image {
  background-color: red;
  width: 100px;
  height: 100px;
}

属性

属性 类型 默认值 描述 最低版本
src String - 图片地址。 -
mode String scaleToFill 图片模式。 -
class String 外部样式 - -
style String 内联样式 - -
lazy-load Boolean false 支持图片懒加载,不支持通过 css 来控制 image 展示隐藏的场景。 1.9.0
default-source String - 默认图片地址,若设置默认图片地址,会先显示默认图片,等 src 对应的图片加载成功后,再渲染对应的图片。 1.19.0
onLoad EventHandle - 图片载入完毕时触发,事件对象 event.detail = {height: '图片高度px', width: '图片宽度px'} -
onError EventHandle - 当图片加载错误时触发,事件对象 event.detail = {errMsg: 'something wrong' -
onTap EventHandle - 点击图片时触发。 -
catchTap EventHandle - 点击图片时触发,阻止事件冒泡。 -

注意:image 组件默认宽度 300px、高度 225px

mode

mode 有 13 种模式,其中 4 种是缩放模式,9 种是裁剪模式。

缩放模式

属性 描述
scaleToFill 不保持纵横比缩放,使图片的宽高完全拉伸至填满 image 元素。
aspectFit 保持纵横比缩放,使图片的长边能完全显示出来。也就是说,可以完整地将图片显示出来。
aspectFill 保持纵横比缩放,只保证图片的短边能完全显示出来。也就是说,图片通常只在水平或垂直方向是完整的,另一个方向将会发生截取。
widthFix 宽度不变,高度自动变化,保持原图宽高比不变。

裁剪模式

属性 描述
top 不缩放图片,只显示顶部区域。
bottom 不缩放图片,只显示底部区域。
center 不缩放图片,只显示中间区域。
left 不缩放图片,只显示左边区域。
right 不缩放图片,只显示右边区域。
top left 不缩放图片,只显示左上边区域。
top right 不缩放图片,只显示右上边区域。
bottom left 不缩放图片,只显示左下边区域。
bottom right 不缩放图片,只显示右下边区域。

说明:图片高度不能设置为 auto,如果需要图片高度为 auto,直接设置 mode 为 widthFix。

常见问题

image 标签支持读取流文件吗?

小程序中显示二进制数据流的图片,需要先将二进制数据转成 base64 字符串,然后把 base64 字符串放在 image 中的 src 中实现显示。

真机调用 image 组件,显示的图片被压缩?

建议把 mode 值设为 widthFix。

支付宝小程序导航组件 页面链接·Navigator
支付宝小程序媒体组件 视频·video
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

支付宝小程序开发文档

支付宝小程序 快速示例

支付宝小程序 小程序快速示例

支付宝小程序 框架

支付宝小程序 组件

支付宝小程序组件 基础组件

支付宝小程序组件 无障碍访问

支付宝小程序 扩展组件

支付宝小程序扩展组件 UI组件

支付宝小程序 API

支付宝小程序 开发工具

支付宝小程序 云服务

支付宝小程序 Serverless

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }