目录

cover-image

覆盖在系统组件之上的图片。

可支持在map、video、canvas、camera组件上使用。

重要提示:

cover-image是为兼容旧版小程序设计的组件,新开发项目请直接使用image组件。

自起始版本(1.0.22)后,map、video、canvas、camera组件内部嵌套的子内容默认正常显示;旧版本中,标签下的嵌套内容默认不展示。

起始版本: 1.0.22

约束与限制:

cover-image组件默认宽度320px,高度240px。

属性:

名称 类型 默认值 必填 描述
src string - 是 图片资源地址。支持线上资源和本地资源,支持png,jpg,jpeg,gif,svg,bmp,webp。
mode string scaleToFill 否 图片裁剪、缩放的模式。详细内容参见“mode合法值说明”。
binderror eventhandle - 否 当错误发生时触发,event.detail = {errMsg}。
bindload eventhandle - 否 当图片载入完毕时触发,event.detail = {height, width}。

mode合法值说明:

值 描述
scaleToFill 缩放模式,不保持纵横比缩放图片,使图片的宽高完全拉伸至填满image元素。
aspectFit 缩放模式,保持纵横比缩放图片,使图片的长边能完全显示出来。即:可以完整地将图片显示出来。
aspectFill 缩放模式,保持纵横比缩放图片,只保证图片的短边能完全显示出来。即:非正方形图片只在水平或垂直方向是完整的,另一个方向将会发生截取。
widthFix 缩放模式,宽度不变,高度自动变化,保持原图宽高比不变。
heightFix 缩放模式,高度不变,宽度自动变化,保持原图宽高比不变。
top 裁剪模式,不缩放图片,只显示图片的顶部区域。
bottom 裁剪模式,不缩放图片,只显示图片的底部区域。
center 裁剪模式,不缩放图片,只显示图片的中间区域。
left 裁剪模式,不缩放图片,只显示图片的左边区域。
right 裁剪模式,不缩放图片,只显示图片的右边区域。
top left 裁剪模式,不缩放图片,只显示图片的左上边区域。
top right 裁剪模式,不缩放图片,只显示图片的右上边区域。
bottom left 裁剪模式,不缩放图片,只显示图片的左下边区域。
bottom right 裁剪模式,不缩放图片,只显示图片的右下边区域。

示例:

hxml文件:

<map
  id="myMap"
  class="my-map-container"
  latitude="{{ latitude }}"
  longitude="{{ longitude }}"
  scale="16"
  show-location>
  <scroll-view class="comp-container" scroll-y="true">
    <cover-view class="info-card" has:for="{{ modeArray }}" has:for-item="item">
      <cover-view class="card-title">
          {{ item.text }}
      </cover-view>
      <cover-image class="card-image" src="{{ src }}" mode="{{ item.mode }}" bindload="imageLoad" binderror="imageLoadError"></cover-image>
      <cover-view class="card-btn" bindtap="onBtnClick" data-mode="{{ item.mode }}">
          点击按钮
      </cover-view>
    </cover-view>
  </scroll-view>
</map>

js文件:

Page({
  data: {
    latitude: 39.908823,
    longitude: 116.397470,

    modeArray: [
      { 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: 'https://www.example.com/example.jpg', // 此处仅为样例,请开发者更换为可用图片资源地址
  },

  onBtnClick(e) {
    has.showToast({
      title: `当前 mode:${e.currentTarget.dataset.mode}`,
      icon: 'success'
    });
  },

  imageLoadError(e) {
    console.error('加载失败', e.detail);
  },

  imageLoad(e) {
    console.info('加载完成', e.detail);
  }
});

css文件:

.my-map-container {
  width: 100%;
  height: 100vh;
}

.comp-container {
  position: relative;
  width: 100vw;
  height: 40vh;
}

.info-card {
  background: rgba(255,255,255,0.5);
  border-radius: 16rpx;
  padding: 30rpx;
  box-shadow: 0 8rpx 24rpx rgba(0, 0, 0, 0.15);
  margin-bottom: 20rpx;
}

.card-title {
  font-size: 30rpx;
  font-weight: 500;
  color: #333;
  margin-bottom: 20rpx;
}

.card-image {
  width: 100%;
  height: 320rpx;
  border-radius: 12rpx;
  object-fit: cover;
  margin-bottom: 24rpx;
  border: 3rpx solid #0A59F7;
  box-sizing: border-box;
}

.card-btn {
  width: 100%;
  height: 80rpx;
  line-height: 80rpx;
  background-color: #0A59F7;
  color: #fff;
  text-align: center;
  border-radius: 500rpx;
  font-size: 32rpx;
}