button

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

微信 Windows 版:支持

微信 Mac 版:支持

微信 鸿蒙 OS 版:支持

相关文档: 聊天工具模式

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

功能描述

按钮。

通用属性

属性 类型 默认值 必填 说明 最低版本
size string default 否 按钮的大小 1.0.0
合法值 说明
default 默认大小
mini 小尺寸
type string default 否 按钮的样式类型 1.0.0
合法值 说明
primary 绿色
default 白色
warn 红色
plain boolean false 否 按钮是否镂空,背景色透明 1.0.0
disabled boolean false 否 是否禁用 1.0.0
loading boolean false 否 名称前是否带 loading 图标 1.0.0
form-type string 否 用于 form 组件,点击分别会触发 form 组件的 submit/reset 事件 1.0.0
合法值 说明 最低版本
submit 提交表单
reset 重置表单
submitToGroup 转发文本到聊天 3.7.8
open-type string 否 微信开放能力 1.1.0
合法值 说明 最低版本
contact 打开客服会话,如果用户在会话中点击消息卡片后返回微信小程序,可以从 bindcontact 回调中获得具体信息,具体说明。鸿蒙 OS 暂不支持 1.1.0
liveActivity 通过前端获取新的一次性订阅消息下发机制使用的 code 2.26.2
share 触发用户转发,使用前建议先阅读使用指引 1.2.0
getPhoneNumber 手机号快速验证,向用户申请,并在用户同意后,快速填写和验证手机,具体说明 (*微信小程序插件中不能使用*) 1.2.0
getRealtimePhoneNumber 手机号实时验证,向用户申请,并在用户同意后,快速填写和实时验证手机号。具体说明 (*微信小程序插件中不能使用*) 2.24.4
getUserInfo 获取用户信息,可以从bindgetuserinfo回调中获取到用户信息 (*微信小程序插件中不能使用*) 1.3.0
launchApp 打开APP,可以通过app-parameter属性设定向APP传的参数具体说明 1.9.5
openSetting 打开授权设置页 2.0.7
feedback 打开“意见反馈”页面,用户可提交反馈内容并上传日志,开发者可以登录微信小程序管理后台后进入左侧菜单“客服反馈”页面获取到反馈内容 2.1.0
chooseAvatar 获取用户头像,可以从bindchooseavatar回调中获取到头像信息 2.21.2
agreePrivacyAuthorization 用户同意隐私协议按钮。用户点击一次此按钮后,所有已声明过的隐私接口可以正常调用。可通过 bindagreeprivacyauthorization 监听用户同意隐私协议事件。隐私合规开发指南详情可见《微信小程序隐私协议开发指南》 2.32.3
hover-class string button-hover 否 指定按钮按下去的样式类。当 hover-class="none" 时,没有点击态效果 1.0.0
hover-stop-propagation boolean false 否 指定是否阻止本节点的祖先节点出现点击态 1.5.0
hover-start-time number 20 否 按住后多久出现点击态,单位毫秒 1.0.0
hover-stay-time number 70 否 手指松开后点击态保留时间,单位毫秒 1.0.0
lang string en 否 指定返回用户信息的语言,zh_CN 简体中文,zh_TW 繁体中文,en 英文。 1.3.0
合法值 说明
en 英文
zh_CN 简体中文
zh_TW 繁体中文
session-from string 否 会话来源,open-type=”contact”时有效,长度不超过 1024 个字符 1.4.0
send-message-title string 当前标题 否 会话内消息卡片标题,open-type=”contact”时有效 1.5.0
send-message-path string 当前分享路径 否 会话内消息卡片点击跳转微信小程序路径,open-type=”contact”时有效 1.5.0
send-message-img string 截图 否 会话内消息卡片图片,open-type=”contact”时有效 1.5.0
app-parameter string 否 打开 APP 时,向 APP 传递的参数,open-type=launchApp时有效 1.9.5
show-message-card boolean false 否 是否显示会话内消息卡片,设置此参数为 true,用户进入客服会话会在右下角显示”可能要发送的微信小程序“提示,用户点击后可以快速发送微信小程序消息,open-type=”contact”时有效 1.5.0
phone-number-no-quota-toast boolean true 否 当手机号快速验证或手机号实时验证额度用尽时,是否对用户展示“申请获取你的手机号,但该功能使用次数已达当前微信小程序上限,暂时无法使用”的提示,默认展示,open-type=”getPhoneNumber” 或 open-type=”getRealtimePhoneNumber” 时有效 3.0.1
need-show-entrance boolean true 否 转发的文本消息是否要带微信小程序入口 3.7.8
entrance-path string ” 否 从消息微信小程序入口打开微信小程序的路径,默认为聊天工具启动路径 3.7.8
bindgetuserinfo eventhandle 否 用户点击该按钮时,会返回获取到的用户信息,回调的detail数据与wx.getUserInfo返回的一致,open-type=”getUserInfo”时有效 1.3.0
bindcontact eventhandle 否 客服消息回调,open-type=”contact”时有效。 1.5.0
createliveactivity eventhandle 否 新的一次性订阅消息下发机制回调,open-type=liveActivity时有效 2.26.2
bindgetphonenumber eventhandle 否 手机号快速验证回调,open-type=getPhoneNumber时有效。提示:在触发 bindgetphonenumber 回调后应立即隐藏手机号按钮组件,或置为 disabled 状态,避免用户重复授权手机号产生额外费用。 1.2.0
bindgetrealtimephonenumber eventhandle 否 手机号实时验证回调,open-type=getRealtimePhoneNumber 时有效。提示:在触发 bindgetrealtimephonenumber 回调后应立即隐藏手机号按钮组件,或置为 disabled 状态,避免用户重复授权手机号产生额外费用。 2.24.4
binderror eventhandle 否 当使用开放能力时,发生错误的回调,open-type=launchApp时有效 1.9.5
bindopensetting eventhandle 否 在打开授权设置页后回调,open-type=openSetting时有效 2.0.7
bindlaunchapp eventhandle 否 打开 APP 成功的回调,open-type=launchApp时有效 2.4.4
bindchooseavatar eventhandle 否 获取用户头像回调,open-type=chooseAvatar时有效 2.21.2
bindagreeprivacyauthorization eventhandle 否 用户同意隐私协议事件回调,open-type=agreePrivacyAuthorization时有效 (提示:如果使用 onNeedPrivacyAuthorization 接口,需要在 bindagreeprivacyauthorization 触发后再调用 resolve({ event: "agree", buttonId })) 2.32.3

Bug & Tip

  1. tip: button-hover 默认为{background-color: rgba(0, 0, 0, 0.1); opacity: 0.7;}
  2. tip: bindgetphonenumber 从1.2.0 开始支持,但是在1.5.3以下版本中无法使用wx.canIUse进行检测,建议使用基础库版本进行判断。
  3. tip: 在bindgetphonenumber 等返回加密信息的回调中调用 wx.login 登录,可能会刷新登录态。此时服务器使用 code 换取的 sessionKey 不是加密时使用的 sessionKey,导致解密失败。建议开发者提前进行 login;或者在回调中先使用 checkSession 进行登录态检查,避免 login 刷新登录态。
  4. tip: 从 2.21.2 起,对getPhoneNumber接口进行了安全升级,bindgetphonenumber 返回的信息中增加code参数,code是一个动态的令牌,开发者拿到code后需调用微信后台接口换取手机号。详情新版接口使用指南
  5. tip: 从 2.1.0 起,button 可作为原生组件的子节点嵌入,以便在原生组件上使用 open-type 的能力。
  6. tip: 目前设置了 form-type 的 button 只会对当前组件中的 form 有效。因而,将 button 封装在自定义组件中,而 form 在自定义组件外,将会使这个 button 的 form-type 失效。

发送文本到群示例代码

需结合 form 和 textarea 组件使用。 button 需要设置 form-type="submitToGroup",此时点击按钮将会发送 textarea 的内容到聊天。

<form bind:submitToGroup="onSubmitToGroup">
    <textarea value="{{shareText}}" />
    <button
    form-type="submitToGroup"
    need-show-entrance="{{true}}"
    entrance-path=""
    ></button>
</form>

示例代码

在开发者工具中预览效果

text

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

微信 Windows 版:支持

微信 Mac 版:支持

微信 鸿蒙 OS 版:支持

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

功能描述

文本。

  1. 内联文本只能用 text 组件,不能用 view,如 <text> foo <text>bar</text> </text>
  2. 新增 span 组件用于内联文本和图片,如 <span> <image> </image> <text>bar</text> </span>

通用属性

属性 类型 默认值 必填 说明 最低版本
selectable boolean false 否 文本是否可选 (已废弃) 1.1.0
user-select boolean false 否 文本是否可选,该属性会使文本节点显示为 inline-block 2.12.1

Skyline 特有属性

属性 类型 默认值 必填 说明
overflow string visible 是 文本溢出处理
合法值 说明
clip 修剪文本
fade 淡出
ellipsis 显示省略号
visible 文本不截断
max-lines number 是 限制文本最大行数
select-on-gesture boolean true 是 是否允许通过手势选择文本,关闭后通常可以结合 SelectionContext.selectRange 接口使用

WebView 特有属性

属性 类型 默认值 必填 说明 最低版本
space string 否 显示连续空格 1.4.0
合法值 说明
ensp 中文字符空格一半大小
emsp 中文字符空格大小
nbsp 根据字体设置的空格大小
decode boolean false 否 是否解码 1.4.0

Bug & Tip

  1. tip: decode可以解析的有 &nbsp; &lt; &gt; &amp; &apos; &ensp; &emsp;
  2. tip: 各个操作系统的空格标准并不一致。
  3. tip:text 组件内只支持 text 嵌套。
  4. tip: 除了文本节点以外的其他节点都无法长按选中。
  5. bug: 基础库版本低于 2.1.0 时, text 组件内嵌的 text style 设置可能不会生效。

示例代码

在开发者工具中预览效果

微信小程序选择

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

渲染框架支持情况:WebView

功能描述

局部文本选区。

属性说明

属性 类型 默认值 必填 说明 最低版本
disable-context-menu boolean false 否 是否隐藏客户端原生文本选区按钮 3.6.4
bindselectionchange eventhandle 否 当选区发生变化时触发 selectionchange 事件 event.detail = { isCollapsed, selectedString, firstNodeId, firstOffset, lastNodeId, lastOffset, firstRangeRect } 3.6.4

Bug & Tip

  1. tip: 长按选区在 wx-selection 内才可以触发 disable-context-menu 的效果
  2. tip: text 和 rich-text 组件需要设置 user-select 为 true。
  3. tip: firstNodeId 和 lastNodeId 需要 text 和 rich-text 组件设置 id。
  4. tip: 超出 wx-selection 的情况下 firstOffset 和 lastOffset 为空。

示例代码

在开发者工具中预览效果

rich-text

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

微信 Windows 版:支持

微信 Mac 版:支持

微信 鸿蒙 OS 版:支持

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

功能描述

富文本。

  1. 自基础库 2.33.0 版本开始支持(3.0.0 除外)。
  2. 遵循 skyline 的样式和布局规则,html tag 被映射成类似 text/span/view 节点,因此存在 text 嵌套问题。
  3. 不支持 td/tr 等表格布局 tag,也不支持 bdo/bdi 等文字排版 tag。建议完全使用 flex 等 skyline 支持的布局方式来创建富文本内容。
  4. 提供了可选的兼容布局模式选项 mode,但仍不保证与 WebView 表现 100% 一致。
  5. 在 2.33.0 基础库下,请尽可能避免为 html tag 使用 wx-rich-text 开头的类名。

通用属性

属性 类型 默认值 必填 说明 最低版本
nodes array/string [] 否 节点列表/HTML String 1.4.0
space string 否 显示连续空格 2.4.1
合法值 说明
ensp 中文字符空格一半大小
emsp 中文字符空格大小
nbsp 根据字体设置的空格大小
user-select boolean false 否 文本是否可选,该属性会使节点显示为 block 2.24.0

Skyline 特有属性

属性 类型 默认值 必填 说明
mode string default 否 布局兼容模式
合法值 说明
default 完全遵循 skyline 的默认行为,不对节点树进行任何更改。
compat 尽可能将 tag 映射为 <view><span></span></view> 的形式。通常最接近 webview 的表现。
aggressive 所有 tag 均被映射为形如 <view><span></span></view> 的形式。
inline-block 实验性的 inline-block 布局策略,但无法实现折行。
web 使用 webview 渲染富文本,基础库 3.6.0 开始支持。
web-static 使用 webview 截图的方式渲染富文本,基础库 3.7.7 开始支持。

nodes

现支持两种节点,通过type来区分,分别是元素节点和文本节点,默认是元素节点,在富文本区域里显示的HTML节点

元素节点:type = node

属性 说明 类型 必填 备注
name 标签名 string 是 支持部分受信任的 HTML 节点
attrs 属性 object 否 支持部分受信任的属性,遵循 Pascal 命名法
children 子节点列表 array 否 结构和 nodes 一致

文本节点:type = text

属性 说明 类型 必填 备注
text 文本 string 是 支持entities

受信任的HTML节点及属性

全局支持class和style属性,不支持id属性。

节点 属性
a
abbr
address
article
aside
b
bdi
bdo dir
big
blockquote
br
caption
center
cite
code
col span,width
colgroup span,width
dd
del
div
dl
dt
em
fieldset
font
footer
h1
h2
h3
h4
h5
h6
header
hr
i
img alt,src,height,width
ins
label
legend
li
mark
nav
ol start,type
p
pre
q
rt
ruby
s
section
small
span
strong
sub
sup
table width
tbody
td colspan,height,rowspan,width
tfoot
th colspan,height,rowspan,width
thead
tr colspan,height,rowspan,width
tt
u
ul

Bug 与提示

  1. tip: nodes 不推荐使用 String 类型,性能会有所下降。
  2. tip: rich-text 组件内屏蔽所有节点的事件。
  3. tip: attrs 属性不支持 id ,支持 class 。
  4. tip: name 属性大小写不敏感。
  5. tip: 如果使用了不受信任的HTML节点,该节点及其所有子节点将会被移除。
  6. tip: img 标签仅支持网络图片。
  7. tip: 如果在自定义组件中使用 rich-text 组件,那么仅自定义组件的 wxss 样式对 rich-text 中的 class 生效。

示例代码

在开发者工具中预览效果

progress

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

微信 Windows 版:支持

微信 Mac 版:支持

渲染框架支持情况:WebView

功能描述

进度条。组件属性的长度单位默认为px,2.4.0起支持传入单位(rpx/px)。

属性说明

属性 类型 默认值 必填 说明 最低版本
percent number 否 百分比0~100 1.0.0
show-info boolean false 否 在进度条右侧显示百分比 1.0.0
border-radius number/string 0 否 圆角大小 2.3.1
font-size number/string 16 否 右侧百分比字体大小 2.3.1
stroke-width number/string 6 否 进度条线的宽度 1.0.0
color string #09BB07 否 进度条颜色(请使用activeColor) 1.0.0
activeColor string #09BB07 否 已选择的进度条的颜色 1.0.0
backgroundColor string #EBEBEB 否 未选择的进度条的颜色 1.0.0
active boolean false 否 进度条从左往右的动画 1.0.0
active-mode string backwards 否 backwards: 动画从头播;forwards:动画从上次结束点接着播 1.7.0
duration number 30 否 进度增加1%所需毫秒数 2.8.2
bindactiveend eventhandle 否 动画完成事件 2.4.1

示例代码

在开发者工具中预览效果

icon

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

微信 Windows 版:支持

微信 Mac 版:支持

微信 鸿蒙 OS 版:支持

渲染框架支持情况:WebView

功能描述

图标组件

属性说明

属性 类型 默认值 必填 说明 最低版本
type string 是 icon的类型,有效值:success, success_no_circle, info, warn, waiting, cancel, download, search, clear 1.0.0
size number/string 23 否 icon的大小,单位默认为px,2.4.0起支持传入单位(rpx/px),2.21.3起支持传入其余单位(rem 等)。 1.0.0
color string 否 icon的颜色,同css的color 1.0.0

示例代码

在开发者工具中预览效果

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: [
      ...
    ]
  },
})

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

示例代码

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

在开发者工具中预览效果