stepper

步骤导航器。当完成一个任务需要多个步骤时,可以使用步骤导航器展示当前进展。

说明: 从API Version 5 开始支持。

权限列表

子组件

仅支持<stepper-item>子组件。

说明: 步骤导航器内的步骤顺序按照子组件<stepper-item>的顺序进行排序。

属性

名称

类型

默认值

必填

描述

index

number

-

设置步骤导航器步骤显示第几个stepper-item子组件。

id

string

-

组件的唯一标识。

style

string

-

组件的样式声明。

class

string

-

组件的样式类,用于引用样式表。

ref

string

-

用来指定指向子元素或子组件的引用信息,该引用将注册到父组件的$refs 属性对象上。

disabled

boolean

false

当前组件是否被禁用,在禁用场景下,组件将无法响应用户交互。

data

string

-

给当前组件设置data属性,进行相应的数据存储和读取。

样式

名称

类型

默认值

必填

描述

width

<length> | <percentage>

-

设置组件自身的宽度。

缺省时使用元素自身内容需要的宽度。

height

<length> | <percentage>

-

设置组件自身的高度。

缺省时使用元素自身内容需要的高度。

padding

<length>

0

该属性可以有1到4个值:
  • 指定一个值时,该值指定四个边的内边距。

  • 指定两个值时,第一个值指定上下两边的内边距,第二个指定左右两边的内边距。

  • 指定三个值时,第一个指定上边的内边距,第二个指定左右两边的内边距,第三个指定下边的内边距。

  • 指定四个值时分别为上、右、下、左边的内边距(顺时针顺序)。

padding-[left|top|right|bottom]

<length>

0

设置左、上、右、下内边距属性。

padding-[start|end]

<length>

0

设置起始和末端内边距属性。

margin

<length>

0

使用简写属性设置所有的外边距属性,该属性可以有1到4个值。

  • 只有一个值时,这个值会被指定给全部的四个边。

  • 两个值时,第一个值被匹配给上和下,第二个值被匹配给左和右。

  • 三个值时,第一个值被匹配给上, 第二个值被匹配给左和右,第三个值被匹配给下。

  • 四个值时,会依次按上、右、下、左的顺序匹配 (即顺时针顺序)。

margin-[left|top|right|bottom]

<length>

0

设置左、上、右、下外边距属性。

margin-[start|end]

<length>

0

设置起始和末端外边距属性。

border

-

0

使用简写属性设置所有的边框属性,包含边框的宽度,样式,颜色属性,顺序设置为border-width、border-style、border-color,不设置时,各属性值为默认值。

border-style

string

solid

使用简写属性设置所有边框的样式,可选值为:

  • dotted:显示为一系列圆点,圆点半径为border-width的一半。
  • dashed:显示为一系列短的方形虚线。
  • solid:显示为一条实线。

border-[left|top|right|bottom]-style

string

solid

分别设置左、上、右、下四个边框的样式,可选值为dotted、dashed、solid。

border-[left|top|right|bottom]

-

-

使用简写属性设置对应位置的边框属性,包含边框的宽度,样式,颜色属性,顺序设置为border-width、border-style、border-color,不设置的值为默认值。

border-width

<length>

0

使用简写属性设置元素的所有边框宽度,或者单独为各边边框设置宽度

border-[left|top|right|bottom]-width

<length>

0

分别设置左、上、右、下四个边框的宽度。

border-color

<color>

black

使用简写属性设置元素的所有边框颜色,或者单独为各边边框设置颜色

border-[left|top|right|bottom]-color

<color>

black

分别设置左、上、右、下四个边框的颜色。

border-radius

<length>

-

border-radius属性是设置元素的外边框圆角半径。设置border-radius时不能单独设置某一个方向的border-[left|top|right|bottom]-width,border-[left|top|right|bottom]-color ,如果要设置color和width,需要将四个方向一起设置(border-width、border-color)。

border-[top|bottom]-[left|right]-radius

<length>

-

分别设置左上,右上,右下和左下四个角的圆角半径。

background

<linear-gradient>

-

仅支持设置渐变样式,与background-color、background-image不兼容。

background-color

<color>

-

设置背景颜色。

background-image

string

-

设置背景图片。与background-color、background不兼容;支持本地图片资源地址。

background-size

  • string
  • <length> <length>
  • <percentage> <percentage>

auto

设置背景图片的大小。

  • string可选值:
    • contain:把图像扩展至最大尺寸,以使其高度和宽度完全适用内容区域。
    • cover:把背景图像扩展至足够大,以使背景图像完全覆盖背景区域;背景图像的某些部分也许无法显示在背景定位区域中。
    • auto:保持原图的比例不变。
  • length值参数方式:

    设置背景图像的高度和宽度。第一个值设置宽度,第二个值设置高度。如果只设置一个值,则第二个值会被设置为 "auto"。

  • 百分比参数方式:

    以父元素的百分比来设置背景图像的宽度和高度。第一个值设置宽度,第二个值设置高度。如果只设置一个值,则第二个值会被设置为 "auto"。

background-repeat

string

repeat

针对重复背景图像样式进行设置,背景图像默认在水平和垂直方向上重复。

  • repeat:在水平轴和竖直轴上同时重复绘制图片。
  • repeat-x:只在水平轴上重复绘制图片。
  • repeat-y:只在竖直轴上重复绘制图片。
  • no-repeat:不会重复绘制图片。

background-position

  • string string
  • <length> <length>
  • <percentage> <percentage>

0px 0px

  • 关键词方式:如果仅规定了一个关键词,那么第二个值为"center"。两个值分别定义水平方向位置和竖直方向位置。
    • left:水平方向上最左侧。
    • right:水平方向上最右侧。
    • top:竖直方向上最顶部。
    • bottom:竖直方向上最底部。
    • center:水平方向或竖直方向上中间位置。
  • length值参数方式:第一个值是水平位置,第二个值是垂直位置。 左上角是 0 0。单位是像素 (0px 0px) 。如果仅规定了一个值,另外一个值将是50%。
  • 百分比参数方式:第一个值是水平位置,第二个值是垂直位置。左上角是 0% 0%。右下角是 100% 100%。如果仅规定了一个值,另外一个值为50%。
  • 可以混合使用<percentage>和<length>

opacity

number

1

元素的透明度,取值范围为0到1,1表示为不透明,0表示为完全透明。

display

string

flex

确定一个元素所产生的框的类型,可选值为:

  • flex:弹性布局。
  • none:不渲染此元素。

visibility

string

visible

是否显示元素所产生的框。不可见的框会占用布局(将'display'属性设置为'none'来完全去除框),可选值为:

  • visible:元素正常显示。
  • hidden:隐藏元素,但是其他元素的布局不改变,相当于此元素变成透明。
说明:

visibility和display样式都设置时,仅display生效

flex

number

-

规定当前组件如何适应父组件中的可用空间。它作为一个简写属性,用来设置组件的flex-grow。

说明:

仅父容器为<div>、<list-item>、<tabs>时生效。

flex-grow

number

0

设置组件的拉伸样式,指定父组件容器主轴方向上剩余空间(容器本身大小减去所有flex子元素占用的大小)的分配权重。0为不伸展。

说明:

仅父容器为<div>、<list-item>、<tabs>时生效。

flex-shrink

number

1

设置组件的收缩样式,元素仅在默认宽度之和大于容器的时候才会发生收缩,0为不收缩。

说明:

仅父容器为<div>、<list-item>、<tabs>时生效。

flex-basis

<length>

-

设置组件在主轴方向上的初始大小。

说明:

仅父容器为<div>、<list-item>、<tabs>时生效。

position

string

relative

设置元素的定位类型,不支持动态变更。

  • fixed:相对与整个界面进行定位。
  • absolute:相对于父元素进行定位。
  • relative:相对于其正常位置进行定位。
说明:

absolute属性仅在父容器为<div>、<stack>时生效。

[left|top|right|bottom]

<length>

-

left|top|right|bottom需要配合position样式使用,来确定元素的偏移位置。

  • left属性规定元素的左边缘。该属性定义了定位元素左外边距边界与其包含块左边界之间的偏移。
  • top属性规定元素的顶部边缘。该属性定义了一个定位元素的上外边距边界与其包含块上边界之间的偏移。
  • right属性规定元素的右边缘。该属性定义了定位元素右外边距边界与其包含块右边界之间的偏移。
  • bottom属性规定元素的底部边缘。该属性定义了一个定位元素的下外边距边界与其包含块下边界之间的偏移。

说明: stepper组件默认占满父容器大小,建议父组件使用应用窗口大小(或者父组件为根节点)来优化体验。

事件

名称

参数

描述

finish

当步骤导航器最后一个步骤完成时触发该事件。

skip

当通过setNextButtonStatus方法设置当前步骤导航器可跳过时,点击右侧跳过按钮触发该事件。

change

{ prevIndex:prevIndex, index: index}

当步骤导航器点击左边或者右边文本按钮进行步骤切换时触发该事件,prevIndex表示老步骤的序号,index表示新步骤的序号。

next

{ index:index, pendingIndex: pendingIndex }

当用户点击下一步按钮时触发该事件,index表示当前步骤序号,pendingIndex表示将于跳转的序号,该事件有返回值,返回值格式为:{ pendingIndex:pendingIndex },可以通过指定pendingIndex来修改下一个步骤使用哪个stepper-item子组件。

back

{ index:index, pendingIndex: pendingIndex }

当用户点击上一步按钮时触发该事件,index表示当前步骤序号,pendingIndex表示将于跳转的序号,该事件有返回值,返回值格式为Object:{ pendingIndex:pendingIndex },可以通过指定pendingIndex来修改上一个步骤使用哪个stepper-item子组件。

方法

名称

参数

描述

setNextButtonStatus

{ status: string, label: label }

设置当前步骤导航器下一步文本按钮的状态,参数中status类型为string,可选值为:

  1. normal:正常状态,下一步文本按钮正常显示,可点击进入下一个步骤;
  2. disabled:不可用状态,下一步文本按钮灰度显示,不可点击进入下一个步骤;
  3. waiting:等待状态,下一步文本按钮不显示,使用等待进度条,不可点击进入下一个步骤。
  4. skip:跳过状态,下一步文本按钮显示跳过按钮,点击时会跳过剩下步骤。

示例

<!-- xxx.hml -->
<div class = "container">
  <stepper class="stepper" id="mystepper" index="0"  onnext="nextclick" onback="backclick">
    <stepper-item class ="stepperItem" label="{{label_1}}">
      <div class = "stepperItemContent" >
        <text class = "text">First screen</text>
      </div>
      <button type="capsule" class ="button" value="setRightButtonStatus" onclick="setRightButton"></button>
    </stepper-item>
    <stepper-item class ="stepperItem" label="{{label_2}}">
      <div class = "stepperItemContent" >
        <text class = "text">Second screen</text>
      </div>
      <button type="capsule" class ="button" value="setRightButtonStatus" onclick="setRightButton"></button>
    </stepper-item>
    <stepper-item class ="stepperItem" label="{{label_3}}">
      <div class = "stepperItemContent" >
        <text class = "text">Third screen</text>
      </div>
      <button type="capsule" class ="button" value="setRightButtonStatus" onclick="setRightButton"></button>
    </stepper-item>
  </stepper>
</div>
/* xxx.css */
.container {
  margin-top: 20px;
  flex-direction: column;
  align-items: center;
  height: 300px;
}
.stepperItem {
  flex-direction: column;
  align-items: center;
}
.stepperItemContent {
  color: #0000ff;
  font-size: 50px;
  justify-content: center;
}
.button {
  width: 60%;
  margin-top: 30px;
  justify-content: center;
}
// xxx.js
export default {
  data: {
    label_1:
    {
       prevLabel: 'BACK',
       nextLabel: 'NEXT',
       status: 'normal'
     },
     label_2:
     {
       prevLabel: 'BACK',
       nextLabel: 'NEXT',
       status: 'normal'
     },
     label_3:
     {
        prevLabel: 'BACK',
        nextLabel: 'NEXT',
        status: 'normal'
     },
  },
  setRightButton(e) {
    this.$element('mystepper').setNextButtonStatus({status: 'skip', label: 'SKIP'});
  },
  nextclick(e) {
    var index = {
      pendingIndex: e.pendingIndex
    }
    return index;
  },
  backclick(e) {
    var index = {
        pendingIndex: e.pendingIndex
    }
    return index;
  },
}