view

基础库 1.0.0 开始支持,低版本需做兼容处理。

微信 Windows 版:支持

微信 Mac 版:支持

微信 鸿蒙 OS 版:支持

渲染框架支持情况:Skyline (使用最新 Nightly 工具调试)、WebView

功能描述

视图容器

属性说明

属性 类型 默认值 必填 说明 最低版本
hover-class string none 否 指定按下去的样式类。当 hover-class="none" 时,没有点击态效果 1.0.0
hover-stop-propagation boolean false 否 指定是否阻止本节点的祖先节点出现点击态 1.5.0
hover-start-time number 50 否 按住后多久出现点击态,单位毫秒 1.0.0
hover-stay-time number 400 否 手指松开后点击态保留时间,单位毫秒 1.0.0

Bug & Tip

  1. tip: 如果需要使用滚动视图,请使用 scroll-view

示例代码

在开发者工具中预览效果

swiper-item

基础库 1.0.0 开始支持,低版本需做兼容处理。

微信 Windows 版:支持

微信 Mac 版:支持

微信 鸿蒙 OS 版:支持

渲染框架支持情况:Skyline (使用最新 Nightly 工具调试)、WebView

功能描述

仅可放置在 swiper 组件中,宽高自动设置为 100%。

属性说明

属性 类型 默认值 必填 说明 最低版本
item-id string 否 该 swiper-item 的标识符 1.9.0
skip-hidden-item-layout boolean false 否 是否跳过未显示的滑块布局,设为 true 可优化复杂情况下的滑动性能,但会丢失隐藏状态滑块的布局信息 1.9.0

swiper

基础库 1.0.0 开始支持,低版本需做兼容处理。

微信 Windows 版:支持

微信 Mac 版:支持

微信 鸿蒙 OS 版:支持

渲染框架支持情况:Skyline (使用最新 Nightly 工具调试)、WebView

功能描述

滑块视图容器。其中只可放置swiper-item组件,否则会导致未定义的行为。

  1. 使用 worklet 函数需要开启开发者工具 “将 JS 编译成 ES5” 或 “编译 worklet 函数” 选项。

通用属性

属性 类型 默认值 必填 说明 最低版本
indicator-dots boolean false 否 是否显示面板指示点 1.0.0
indicator-color color rgba(0, 0, 0, .3) 否 指示点颜色 1.1.0
indicator-active-color color #000000 否 当前选中的指示点颜色 1.1.0
autoplay boolean false 否 是否自动切换 1.0.0
current number 0 否 当前所在滑块的 index 1.0.0
interval number 5000 否 自动切换时间间隔 1.0.0
duration number 500 否 滑动动画时长 1.0.0
circular boolean false 否 是否采用衔接滑动 1.0.0
vertical boolean false 否 滑动方向是否为纵向 1.0.0
display-multiple-items number 1 否 同时显示的滑块数量 1.9.0
previous-margin string “0px” 否 前边距,可用于露出前一项的一小部分,接受 px 和 rpx 值 1.9.0
next-margin string “0px” 否 后边距,可用于露出后一项的一小部分,接受 px 和 rpx 值。skyline 于 3.5.1 版本支持 1.9.0
easing-function string “default” 否 指定 swiper 切换缓动动画类型 2.6.5
合法值 说明
default 默认缓动函数
linear 线性动画
easeInCubic 缓入动画
easeOutCubic 缓出动画
easeInOutCubic 缓入缓出动画
direction string “all” 否 指定 swiper 滑动方向 3.8.10
合法值 说明
all 默认
positive 如 vertical 为 true 时,允许用户下滑(swiper 内容向上滚动),为 false 时,允许用户右滑(swiper 内容向左滚动)
negative 如 vertical 为 true 时,允许用户上滑(swiper 内容向下滚动),为 false 时,允许用户左滑(swiper 内容向右滚动)
bindchange eventhandle 否 current 改变时会触发 change 事件,event.detail = {current, source} 1.0.0
bindtransition eventhandle 否 swiper-item 的位置发生改变时会触发 transition 事件,event.detail = {dx: dx, dy: dy}。Skyline 仅支持非 worklet 的组件方法作为回调。 2.4.3
bindanimationfinish eventhandle 否 动画结束时会触发 animationfinish 事件,event.detail 同 bindchange。Skyline 仅支持非 worklet 的组件方法作为回调。 1.9.0

Skyline 特有属性

属性 类型 默认值 必填 说明 最低版本
layout-type string normal 否 渲染模式 3.2.0
合法值 说明
normal 默认方式
stackLeft 左向堆叠
stackRight 右向堆叠
tinder 滑动卡片
transformer 过渡动画
transformer-type string scaleAndFade 否 layout-type 为 transformer 时指定动画类型 3.2.0
合法值 说明
scaleAndFade
accordion
threeD
zoomIn
zoomOut
deepthPage
indicator-type string normal 否 指示点动画类型 3.2.0
合法值 说明
normal
worm
wormThin
wormUnderground
wormThinUnderground
expand
jump
jumpWithOffset
scroll
scrollFixedCenter
slide
slideUnderground
scale
swap
swapYRotation
color
indicator-margin number 10 否 指示点四周边距 3.2.0
indicator-spacing number 4 否 指示点间距 3.2.0
indicator-radius number 4 否 指示点圆角大小 3.2.0
indicator-width number 8 否 指示点宽度 3.2.0
indicator-height number 8 否 指示点高度 3.2.0
indicator-alignment Array.<number>/string auto 否 指示点的相对位置 3.2.0
indicator-offset Array.<number> [0, 0] 否 指示点位置的偏移量 3.2.0
scroll-with-animation boolean true 否 改变 current 时使用动画过渡 2.29.0
cache-extent number 0 否 缓存区域大小,值为 1 表示提前渲染上下各一屏区域(swiper 容器大小) 2.29.0
worklet:onscrollstart worklet 否 滑动开始时触发,仅支持 worklet 作为回调。event.detail = {dx: dx, dy: dy}
worklet:onscrollupdate worklet 否 滑动位置更新时触发,仅支持 worklet 作为回调。event.detail = {dx: dx, dy: dy}
worklet:onscrollend worklet 否 滑动结束时触发,仅支持 worklet 作为回调。event.detail = {dx: dx, dy: dy}

WebView 特有属性

属性 类型 默认值 必填 说明 最低版本
snap-to-edge boolean false 否 当 swiper-item 的个数大于等于 2,关闭 circular 并且开启 previous-margin 或 next-margin 的时候,可以指定这个边距是否应用到第一个、最后一个元素 2.12.1

注意事项

  1. layout-type 为 stackLeft stackRight 和 tinder 时仅支持 indicator-type=normal
  2. indicator-type 为 scrollFixedCenter swap swapYRotation 无法在循环模式 circular 下使用
  3. indicator-alignment 可指定为关键词 auto 或 长度为 2 的数组。
    • 横向滑动时 auto 相当于 bottomCenter [0, 1]
    • 纵向滑动时,auto 相当于 centerRight [1, 0]
    • 传入数组时,表示 x/y 轴的相对位置,取值范围 [-1, 1],底边中点为 [0, 1]
  4. indicator-offset 是长度为 2 的数组,表示指示点在 x/y 轴上的偏移量,单位 px。
  5. skyline 的 previous-margin、 display-multiple-items 和 vertical 属性与 webview 表现略有不同,当skyline 使用 next-margin 属性且其值大于 0 时,会将前述三个属性对齐 webview 实现。

渲染模式效果演示

指示器效果演示

Swiper 增强特性示例代码

在开发者工具中预览效果

change事件 source 返回值

从 1.4.0 开始,change事件增加 source字段,表示导致变更的原因,可能值如下:

  1. autoplay 自动播放导致swiper变化;
  2. touch 用户划动引起swiper变化;
  3. 其它原因将用空字符串表示。

Bug & Tip

  1. tip: 如果在 bindchange 的事件回调函数中使用 setData 改变 current 值,则有可能导致 setData 被不停地调用,因而通常情况下请在改变 current 值前检测 source 字段来判断是否是由于用户触摸引起。
  2. tip: 在 mac 微信小程序上,若当前组件所在的页面或全局开启了 enablePassiveEvent 配置项,该内置组件可能会出现非预期表现(详情参考 enablePassiveEvent 文档)

示例代码

在开发者工具中预览效果

scroll-view

基础库 1.0.0 开始支持,低版本需做兼容处理。

微信 Windows 版:支持

微信 Mac 版:支持

微信 鸿蒙 OS 版:支持

相关文档: Skyline 渲染引擎、Skyline 迁移起步

渲染框架支持情况:Skyline (使用最新 Nightly 工具调试)、WebView

功能描述

可滚动视图区域。使用竖向滚动时,需要给 scroll-view 一个固定高度,通过 WXSS 设置 height。组件属性的长度单位默认为 px,2.4.0 起支持传入单位 (rpx/px)。

  1. 横向滚动需打开 enable-flex 以兼容 WebView,如 <scroll-view scroll-x enable-flex style="flex-direction: row;"/>
  2. 滚动条的长度是预估的,若直接子节点的高度差别较大,则滚动条长度可能会不准确
  3. 使用 worklet 函数需要开启开发者工具 “将 JS 编译成 ES5” 或 “编译 worklet 函数” 选项。

通用属性

属性 类型 默认值 必填 说明 最低版本
scroll-x boolean false 否 允许横向滚动 1.0.0
scroll-y boolean false 否 允许纵向滚动 1.0.0
upper-threshold number/string 50 否 距顶部/左边多远时,触发 scrolltoupper 事件 1.0.0
lower-threshold number/string 50 否 距底部/右边多远时,触发 scrolltolower 事件 1.0.0
scroll-top number/string 否 设置竖向滚动条位置 1.0.0
scroll-left number/string 否 设置横向滚动条位置 1.0.0
scroll-into-view string 否 值应为某子元素 id(id 不能以数字开头)。设置哪个方向可滚动,则在哪个方向滚动到该元素 1.0.0
scroll-into-view-offset number 0 否 跳转到 scroll-into-view 目标节点时的额外偏移。skyline 自 3.1.0 版本开始支持,webview 自 3.6.0 版本开始支持。 3.1.0
scroll-with-animation boolean false 否 在设置滚动条位置时使用动画过渡 1.0.0
enable-back-to-top boolean false 否 iOS 点击顶部状态栏、安卓双击标题栏时,滚动条返回顶部,只支持竖向。自 2.27.3 版本开始,若非显式设置为 false,则在显示尺寸大于屏幕 90% 时自动开启。鸿蒙 OS 暂不支持 1.0.0
enable-passive boolean false 否 开启 passive 特性,能优化一定的滚动性能 2.25.3
refresher-enabled boolean false 否 开启自定义下拉刷新 2.10.1
refresher-threshold number 45 否 设置自定义下拉刷新阈值 2.10.1
refresher-default-style string “black” 否 设置自定义下拉刷新默认样式,支持设置 black | white | none, none 表示不使用默认样式 2.10.1
refresher-background string 否 设置自定义下拉刷新区域背景颜色,默认为透明 2.10.1
refresher-triggered boolean false 否 设置当前下拉刷新状态,true 表示下拉刷新已经被触发,false 表示下拉刷新未被触发 2.10.1
bounces boolean true 否 iOS 下 scroll-view 边界弹性控制 (同时开启 enhanced 属性后生效) 2.12.0
show-scrollbar boolean true 否 滚动条显隐控制,仅对垂直滚动条有效 (同时开启 enhanced 属性后生效) 2.12.0
fast-deceleration boolean false 否 滑动减速速率控制, 仅在 iOS 下生效 (同时开启 enhanced 属性后生效) 2.12.0
binddragstart eventhandle 否 滑动开始事件 (同时开启 enhanced 属性后生效) detail { scrollTop, scrollLeft } 2.12.0
binddragging eventhandle 否 滑动事件 (同时开启 enhanced 属性后生效) detail { scrollTop, scrollLeft } 2.12.0
binddragend eventhandle 否 滑动结束事件 (同时开启 enhanced 属性后生效) detail { scrollTop, scrollLeft, velocity } 2.12.0
bindscrolltoupper eventhandle 否 滚动到顶部/左边时触发 1.0.0
bindscrolltolower eventhandle 否 滚动到底部/右边时触发 1.0.0
bindscroll eventhandle 否 滚动时触发,event.detail = { scrollLeft, scrollTop, scrollHeight, scrollWidth, deltaX, deltaY }。skyline 从 3.6.6 开始,额外具有 boundaryVelocity 字段:如果该次滚动会触碰到边界,从该次滚动触发起到下一个滚动事件发生或者当次滚动事件结束为止 boundaryVelocity 将被置为触碰边界时的速度,否则置为 NAN。 1.0.0
bindrefresherpulling eventhandle 否 自定义下拉刷新控件被下拉 2.10.1
bindrefresherrefresh eventhandle 否 自定义下拉刷新被触发 2.10.1
bindrefresherrestore eventhandle 否 自定义下拉刷新被复位 2.10.1
bindrefresherabort eventhandle 否 自定义下拉刷新被中止 2.10.1
scroll-anchoring boolean false 否 开启 scroll anchoring 特性,即控制滚动位置不随内容变化而抖动,可参考 CSS overflow-anchor 属性。webview 仅在 iOS 下生效。skyline 自 3.6.2 版本开始支持,默认为 true 。 2.8.2

Skyline 特有属性

属性 类型 默认值 必填 说明 最低版本
type string 否 渲染模式
合法值 说明 最低版本
list 列表模式。只会渲染在屏节点,会根据直接子节点是否在屏来按需渲染,若只有一个直接子节点则性能会退化 2.25.2
custom 自定义模式。只会渲染在屏节点,子节点可以是 sticky-section list-view grid-view 等组件 2.29.0
nested 嵌套模式。用于处理父子 scroll-view 间的嵌套滚动,子节点可以是 nested-scroll-header nested-scroll-body 组件或自定义 refresher 3.2.0
associative-container string 否 关联的滚动容器 3.2.0
合法值 说明 最低版本
draggable-sheet 关联 draggable-sheet 组件 3.2.0
nested-scroll-view 关联 type=nested 嵌套模式 3.2.0
pop-gesture 关联 页面手势返回 3.4.0
reverse boolean false 否 是否反向滚动。一般初始滚动位置是在顶部,反向滚动则是在底部。 2.27.2
clip boolean true 否 是否对溢出进行裁剪,默认开启 2.32.1
enable-back-to-top boolean false 否 仅 iOS 支持,其余同 WebView 同名组件 2.32.1
cache-extent number 否 指定视口外渲染区域的距离,默认情况下视口外节点不渲染。指定 cache-extent 可优化滚动体验和加载速度,但会提高内存占用且影响首屏速度,可按需启用。 2.29.0
min-drag-distance number 18 否 指定 scroll-view 触发滚动的最小拖动距离。仅在 scroll-view 和其他组件存在手势冲突时使用,可通过调整该属性使得滚动更加灵敏。 2.33.0
scroll-into-view-within-extent boolean false 否 只 scroll-into-view 到 cacheExtent 以内的目标节点,性能更佳 2.29.0
scroll-into-view-alignment string start 否 指定 scroll-into-view 目标节点在视口内的位置 2.29.0
合法值 说明
start 目标节点显示在视口开始处
center 目标节点显示在视口中间
end 目标节点显示在视口结束处
nearest 目标节点在就近的视口边缘显示,若节点已在视口内则不触发滚动
bind:scrollstart eventhandle 否 滚动开始事件,仅支持非 worklet 的组件方法作为回调。event.detail = { isDrag } 2.29.0
bind:scroll eventhandle 否 滚动事件,多返回 isDrag 字段,仅支持非 worklet 的组件方法作为回调。event.detail = { isDrag }
bind:scrollend eventhandle 否 滚动结束事件,仅支持非 worklet 的组件方法作为回调。event.detail = { isDrag } 2.29.0
worklet:onscrollstart worklet 否 同 bindscrollstart,但仅支持 worklet 作为回调 2.29.2
worklet:onscrollupdate worklet 否 bindscroll ,但仅支持 worklet 作为回调 2.29.2
worklet:onscrollend worklet 否 同 bindscrollend,但仅支持 worklet 作为回调 2.29.2
bind:refresherwillrefresh eventhandle 否 自定义下拉刷新即将触发刷新(拖动超过 refresher-threshold 时)的事件 2.29.0
worklet:adjust-deceleration-velocity callback 否 指定手指抬起时做惯性滚动的初速度。(velocity: number) => number 2.29.2
padding Array [0, 0, 0, 0] 否 长度为 4 的数组,按上、右、下、左的顺序指定内边距 3.0.0
refresher-two-level-enabled boolean false 否 开启下拉二级功能 3.0.0
refresher-two-level-triggered boolean false 否 设置打开或关闭二级状态 3.0.0
refresher-two-level-threshold number 150 否 下拉二级的触发阈值 3.0.0
refresher-two-level-close-threshold number 80 否 滑动返回时关闭二级的阈值 3.0.0
refresher-two-level-scroll-enabled boolean false 否 处于二级状态时是否允许滑动 3.0.0
refresher-ballistic-refresh-enabled boolean false 否 惯性滚动是否触发下拉刷新 3.0.0
refresher-two-level-pinned boolean false 否 即将打开二级时是否固定住 3.0.0
bind:refresherstatuschange eventhandle 否 下拉刷新状态变化的回调 3.0.0

WebView 特有属性

属性 类型 默认值 必填 说明 最低版本
enable-flex boolean false 否 启用 flexbox 布局。开启后,当前节点声明了 display: flex 就会成为 flex 容器,并作用于其子节点。 2.7.3
enhanced boolean false 否 启用 scroll-view 增强特性,启用后可通过 ScrollViewContext 操作 scroll-view。鸿蒙 OS 暂不支持 enhanced 及其相关的属性和方法。 2.12.0
paging-enabled boolean false 否 分页滑动效果(同时开启 enhanced 属性后生效) 2.12.0
using-sticky boolean false 否 使 scroll-view 下的 position sticky 特性生效,否则滚动一屏后 sticky 元素会被隐藏 3.2.1

Bug & Tip

  1. tip: 基础库 2.4.0 以下不支持嵌套 textarea、map、canvas、video 组件
  2. tip: scroll-into-view 的优先级高于 scroll-top
  3. tip: 在滚动 scroll-view 时会阻止页面回弹,所以在 scroll-view 中滚动,是无法触发 onPullDownRefresh
  4. tip: 若要使用下拉刷新,请使用页面的滚动,而不是 scroll-view,这样也能通过点击顶部状态栏回到页面顶部
  5. tip: scroll-view 自定义下拉刷新节点需要声明为 slot=”refresher”,可参考自定义下拉刷新示例
  6. tip: scroll-view 自定义下拉刷新可以结合 WXS 事件响应开发交互动画

bind:refresherstatuschange

返回值 evt.detail = { status, dy },其中 status 的枚举状态如下

export enum RefreshStatus {
  // 空闲
  Idle,
  // 超过下拉刷新阈值,同 bind:refresherwillRefresh 触发时机
  CanRefresh,
  // 下拉刷新,同 bind:refresherrefresh 触发时机
  Refreshing,
  // 下拉刷新完成,同 bind:refresherrestore 触发时机
  Completed,
  // 下拉刷新失败
  Failed,
  // 超过下拉二级阈值
  CanTwoLevel,
  // 开始打开二级
  TwoLevelOpening,
  // 打开二级
  TwoLeveling,
  // 开始关闭二级
  TwoLevelClosing,
}

下拉二级

相关接口

  • 触发下拉刷新 ScrollViewContext.triggerRefresh
  • 关闭下拉刷新 ScrollViewContext.closeRefresh
  • 触发下拉二级 ScrollViewContext.triggerTwoLevel
  • 关闭下拉二级 ScrollViewContext.closeTwoLevel

下拉二级是下拉刷新的一部分,需同时开启 refresher-enabled 和 refresher-two-level-enabled。

<scroll-view
  type="list"
  scroll-y
  refresher-enabled="{{true}}"
  refresher-two-level-enabled="{{true}}"
  refresher-two-level-scroll-enabled="{{true}}"
>
  <view slot="refresher"></view>
</scroll-view>
  1. 当用户下拉 scroll-view 至 refresher-threshold 时松手触发下拉刷新
  2. 继续下拉至 refresher-two-level-threshold 松手触发下拉二级
  3. 开启 refresher-two-level-scroll-enabled 后,二级页面可以滑动关闭,是否关闭的阈值由 refresher-two-level-close-threshold 指定
  4. 下拉刷新和下拉二级的展示区域由 slot=refresher 定义,开发者可根据 refresherstatuschange 判定当前阶段,展示不同内容,例如
buildText(status: RefreshStatus) {
  switch (status) {
    case RefreshStatus.Idle:
      return '下拉刷新'
    case RefreshStatus.CanRefresh:
      return '松手刷新,下拉进入二楼'
    case RefreshStatus.Refreshing:
      return '正在刷新'
    case RefreshStatus.Completed:
      return '刷新成功'
    case RefreshStatus.Failed:
      return '刷新失败'
    case RefreshStatus.CanTwoLevel:
      return '松手进入二楼'
    default:
      return ''
  }
},

下拉二级示例代码:在开发者工具中预览效果

嵌套模式

在 skyline 渲染模式下,当存在两个 scroll-view 相互嵌套的场景时,两者的滚动不能很流畅地衔接,因此可以将外层 scroll-view 改为嵌套模式,这样可以让两个 scroll-view 的滚动衔接起来。

<!-- 外层 scroll-view -->
<scroll-view
  type="nested"
  scroll-y
  refresher-enabled="{{true}}"
>
  <view slot="refresher">自定义 refresher</view>
  <nested-scroll-header><view>外层 scroll-vew 的节点 1</view></nested-scroll-header>
  <nested-scroll-header><view>外层 scroll-vew 的节点 2</view></nested-scroll-header>
  <nested-scroll-body>
    <swiper>
      <swiper-item>
        <!-- 里层 scroll-view -->
        <scroll-view type="list" associative-container="nested-scroll-view">
          <view>里层 scroll-vew 的节点 1</view>
          <view>里层 scroll-vew 的节点 2</view>
        </scroll-view>
      </swiper-item>
      <swiper-item></swiper-item>
      <swiper-item></swiper-item>
    </swiper>
  </nested-scroll-body>
</scroll-view>
  1. 外层 scroll-view 的子节点只支持 nested-scroll-header、nested-scroll-body 和自定义 refresher
  2. 外层 scroll-view 的子节点中只能有一个 nested-scroll-body
  3. nested-scroll-header 和 nested-scroll-body 只能有一个子节点
  4. nested-scroll-header 只能渲染在 nested-scroll-body 上面
  5. 嵌套滚动策略:当向下滚动时,先滚动外层 scroll-view,再滚动里层 scroll-view;当向上滚动时,先滚动里层 scroll-view,再滚动外层 scroll-view

嵌套模式示例代码: 在开发者工具中预览效果

列表构造器

在 Skyline 渲染模式下,如果列表项特别多,可以考虑使用列表构造器。它可以实现可回收列表,回收的范围取决于 cache-extent 配置。默认情况下,列表项进入视口时会被创建,离开视口后则会被回收,也就是说只有屏幕内的列表项才会被真正创建出来。

<scroll-view
  type="custom"
  scroll-y
>
   <list-builder
    list="{{list}}"
    child-count="{{list.length}}"
    child-height="200"
    bind:itembuild="onItemBuild"
    bind:itemdispose="onItemDispose"
  >
    <view slot:item slot:index style="height: 200px;">
      <view>{{index}}</view>
    </view>
  </list-builder>
</scroll-view>
Component({
  data: {
    list: [
      ...
    ]
  },

  methods: {
    onItemBuild(evt) {
      console.log('build', evt.detail.index)
    },

    onItemDispose(evt) {
      console.log('dispose', evt.detail.index)
    },
  },
})
  1. scroll-view 必须设置成 custom 模式
  2. 列表项默认为定高模式,需要通过 child-height 指定,所有列表项必须等高
  3. 在不定高模式下,因为无法知道未创建的列表项高度,会出现滚动条跳动的问题
  4. 默认情况下,不在视口中的列表项不会被创建。在滚动过程中,会根据 child-count 判断是否需要创建或回收列表项,如果需要则会进行创建或回收,同时触发对应事件
  5. 目前只支持纵向滚动列表
  6. 不支持 scroll-into-view

列表构造器示例代码: 在开发者工具中预览效果

网格构造器

网格构造器和列表构造器的不定高模式类似,可以参考列表构造器的使用方法和注意事项。

<scroll-view
  type="custom"
  scroll-y
>
   <grid-builder
    list="{{list}}"
    child-count="{{list.length}}"
    cross-axis-count="4"
        cross-axis-gap="8"
        main-axis-gap="8"
  >
    <view slot:item slot:index style="height: 200px;">
      <view>{{index}}</view>
    </view>
  </grid-builder>
</scroll-view>
Component({
  data: {
    list: [
      ...
    ]
  },
})

网格构造器示例代码: 在开发者工具中预览效果

示例代码

自定义下拉刷新示例代码: 在开发者工具中预览效果

在开发者工具中预览效果

微信小程序 root-portal

基础库 2.25.2 开始支持,低版本需做兼容处理。

微信 Windows 版:支持

微信 Mac 版:支持

微信 鸿蒙 OS 版:支持

渲染框架支持情况:Skyline (使用最新 Nightly 工具调试)、WebView

功能描述

使整个子树从页面中脱离出来,类似于在 CSS 中使用 fixed position 的效果。主要用于制作弹窗、弹出层等。

属性说明

属性 类型 默认值 必填 说明 最低版本
enable boolean true 否 是否从页面中脱离出来 2.26.1
externalClass string 否 外部样式类 3.9.2

示例代码

在开发者工具中预览效果

page-container

基础库 2.16.0 开始支持,低版本需做兼容处理。

微信 Windows 版:支持

微信 Mac 版:支持

微信 鸿蒙 OS 版:支持

渲染框架支持情况:Skyline (使用最新 Nightly 工具调试)、WebView

功能描述

页面容器。

微信小程序如果在页面内进行复杂的界面设计(如在页面内弹出半屏的弹窗、在页面内加载一个全屏的子页面等),用户进行返回操作会直接离开当前页面,不符合用户预期,预期应为关闭当前弹出的组件。 为此提供“假页”容器组件,效果类似于 popup 弹出层,页面内存在该容器时,当用户进行返回操作,关闭该容器不关闭页面。返回操作包括三种情形,右滑手势、安卓物理返回键和调用 navigateBack 接口。

属性说明

属性 类型 默认值 必填 说明 最低版本
show boolean false 否 是否显示容器组件 2.16.0
duration number 300 否 动画时长,单位毫秒 2.16.0
z-index number 100 否 z-index 层级 2.16.0
overlay boolean true 否 是否显示遮罩层 2.16.0
position string bottom 否 弹出位置,可选值为 top bottom right center 2.16.0
round boolean false 否 是否显示圆角 2.16.0
close-on-slide-down boolean false 否 是否在下滑一段距离后关闭 2.16.0
overlay-style string 否 自定义遮罩层样式 2.16.0
custom-style string 否 自定义弹出层样式 2.16.0
bind:beforeenter eventhandle 否 进入前触发 2.16.0
bind:enter eventhandle 否 进入中触发 2.16.0
bind:afterenter eventhandle 否 进入后触发 2.16.0
bind:beforeleave eventhandle 否 离开前触发 2.16.0
bind:leave eventhandle 否 离开中触发 2.16.0
bind:afterleave eventhandle 否 离开后触发 2.16.0
bind:clickoverlay eventhandle 否 点击遮罩层时触发 2.16.0

Bug & Tip

  1. tip: 当前页面最多只有 1 个容器,若已存在容器的情况下,无法增加新的容器
  2. tip: wx.navigateBack 无法在页面栈顶调用,此时没有上一级页面
  3. tip: 鸿蒙 OS 下暂时无法拦截页面返回

示例代码

在开发者工具中预览效果

movable-view

基础库 1.2.0 开始支持,低版本需做兼容处理。

微信 Windows 版:支持

微信 Mac 版:支持

微信 鸿蒙 OS 版:支持

渲染框架支持情况:WebView

功能描述

可移动的视图容器,在页面中可以拖拽滑动。movable-view必须在 movable-area 组件中,并且必须是直接子节点,否则不能移动。

属性说明

属性 类型 默认值 必填 说明 最低版本
direction string none 否 movable-view的移动方向,属性值有all、vertical、horizontal、none 1.2.0
inertia boolean false 否 movable-view是否带有惯性 1.2.0
out-of-bounds boolean false 否 超过可移动区域后,movable-view是否还可以移动 1.2.0
x number/string 否 定义x轴方向的偏移,如果x的值不在可移动范围内,会自动移动到可移动范围;改变x的值会触发动画;单位支持px(默认)、rpx; 1.2.0
y number/string 否 定义y轴方向的偏移,如果y的值不在可移动范围内,会自动移动到可移动范围;改变y的值会触发动画;单位支持px(默认)、rpx; 1.2.0
damping number 20 否 阻尼系数,用于控制x或y改变时的动画和过界回弹的动画,值越大移动越快 1.2.0
friction number 2 否 摩擦系数,用于控制惯性滑动的动画,值越大摩擦力越大,滑动越快停止;必须大于0,否则会被设置成默认值 1.2.0
disabled boolean false 否 是否禁用 1.9.90
scale boolean false 否 是否支持双指缩放,默认缩放手势生效区域是在movable-view内 1.9.90
scale-min number 0.1 否 定义缩放倍数最小值 1.9.90
scale-max number 10 否 定义缩放倍数最大值 1.9.90
scale-value number 1 否 定义缩放倍数,取值范围为 0.1 – 10 1.9.90
animation boolean true 否 是否使用动画 2.1.0
bindchange eventhandle 否 拖动过程中触发的事件,event.detail = {x, y, source} 1.9.90
bindscale eventhandle 否 缩放过程中触发的事件,event.detail = {x, y, scale},x和y字段在2.1.0之后支持 1.9.90
htouchmove eventhandle 否 初次手指触摸后移动为横向的移动时触发,如果catch此事件,则意味着touchmove事件也被catch 1.9.90
vtouchmove eventhandle 否 初次手指触摸后移动为纵向的移动时触发,如果catch此事件,则意味着touchmove事件也被catch 1.9.90

bindchange 返回的 source 表示产生移动的原因

值 说明
touch 拖动
touch-out-of-bounds 超出移动范围
out-of-bounds 超出移动范围后的回弹
friction 惯性
空字符串 setData

Bug & Tip

  1. tip: movable-view 必须设置width和height属性,不设置默认为10px
  2. tip: movable-view 默认为绝对定位,top和left属性为0px
  3. tip: 若当前组件所在的页面或全局开启了 enablePassiveEvent 配置项,该内置组件可能会出现非预期表现(详情参考 enablePassiveEvent 文档)

movable-area

基础库 1.2.0 开始支持,低版本需做兼容处理。

微信 Windows 版:支持

微信 Mac 版:支持

微信 鸿蒙 OS 版:支持

渲染框架支持情况:WebView

功能描述

movable-view 的可移动区域。

属性说明

属性 类型 默认值 必填 说明 最低版本
scale-area Boolean false 否 当里面的 movable-view 设置为支持双指缩放时,设置此值可将缩放手势生效区域修改为整个 movable-area 1.9.90

Bug & Tip

  1. tip: movable-area 必须设置 width 和 height 属性,不设置默认为 10px**
  2. tip: 当 movable-view 小于 movable-area 时,movable-view 的移动范围是在 movable-area 内;
  3. tip: 当 movable-view 大于 movable-area 时,movable-view 的移动范围必须包含 movable-area(x 轴方向和 y 轴方向分开考虑)
  4. tip: 若当前组件所在的页面或全局开启了 enablePassiveEvent 配置项,该内置组件可能会出现非预期表现(详情参考 enablePassiveEvent 文档)

示例代码

在开发者工具中预览效果

match-media

基础库 2.11.1 开始支持,低版本需做兼容处理。

微信 Windows 版:支持

微信 Mac 版:支持

微信 鸿蒙 OS 版:支持

渲染框架支持情况:WebView

功能描述

media query 匹配检测节点。可以指定一组 media query 规则,满足时,这个节点才会被展示。

通过这个节点可以实现“页面宽高在某个范围时才展示某个区域”这样的效果。

属性说明

属性 类型 默认值 必填 说明 最低版本
min-width number 否 页面最小宽度( px 为单位) 2.11.1
max-width number 否 页面最大宽度( px 为单位) 2.11.1
width number 否 页面宽度( px 为单位) 2.11.1
min-height number 否 页面最小高度( px 为单位) 2.11.1
max-height number 否 页面最大高度( px 为单位) 2.11.1
height number 否 页面高度( px 为单位) 2.11.1
orientation string 否 屏幕方向( landscape 或 portrait ) 2.11.1

示例代码

<match-media min-width="300" max-width="600">
  <view>当页面宽度在 300 ~ 500 px 之间时展示这里</view>
</match-media>

<match-media min-height="400" orientation="landscape">
  <view>当页面高度不小于 400 px 且屏幕方向为纵向时展示这里</view>
</match-media>

cover-view

目前原生组件均已支持同层渲染,建议使用 view 替代

基础库 1.4.0 开始支持,低版本需做兼容处理。

微信 Windows 版:支持

微信 Mac 版:支持

微信 鸿蒙 OS 版:支持

渲染框架支持情况:Skyline (使用最新 Nightly 工具调试)、WebView

功能描述

覆盖在原生组件之上的文本视图。

可覆盖的原生组件包括 map、video、canvas、camera、live-player、live-pusher

只支持嵌套 cover-view、cover-image,可在 cover-view 中使用 button。组件属性的长度单位默认为px,2.4.0起支持传入单位(rpx/px)。

属性说明

属性 类型 默认值 必填 说明 最低版本
scroll-top number/string 否 设置顶部滚动偏移量,仅在设置了 overflow-y: scroll 成为滚动元素后生效 2.1.0

Bug & Tip

  1. tip: cover-view和cover-image的aria-role仅可设置为button,读屏模式下才可以点击,并朗读出“按钮”;为空时可以聚焦,但不可点击
  2. tip: 基础库 2.2.4 起支持 touch 相关事件,也可使用 hover-class 设置点击态
  3. tip: 基础库 2.1.0 起支持设置 scale rotate 的 css 样式,包括 transition 动画
  4. tip: 基础库 1.9.90 起 cover-view 支持 overflow: scroll,但不支持动态更新 overflow
  5. tip: 基础库 1.9.90 起最外层 cover-view 支持 position: fixed
  6. tip: 基础库 1.9.0 起支持插在 view 等标签下。在此之前只可嵌套在原生组件map、video、canvas、camera内,避免嵌套在其他组件内。
  7. tip: 基础库 1.6.0 起支持css transition动画,transition-property只支持transform (translateX, translateY)与opacity。
  8. tip: 基础库 1.6.0 起支持css opacity。
  9. tip: 事件模型遵循冒泡模型,但不会冒泡到原生组件。
  10. tip: 文本建议都套上cover-view标签,避免排版错误。
  11. tip: 只支持基本的定位、布局、文本样式。不支持设置单边的border、background-image、shadow、overflow: visible等。
  12. tip: 建议子节点不要溢出父节点
  13. tip: 支持使用 z-index 控制层级
  14. tip: 默认设置的样式有:white-space: nowrap; line-height: 1.2; display: block;
  15. bug: 自定义组件嵌套 cover-view 时,自定义组件的 slot 及其父节点暂不支持通过 wx:if 控制显隐,否则会导致 cover-view 不显示

示例代码

在开发者工具中预览效果