目录

progress

进度条。

起始版本: 1.0.0

属性:

名称 类型 默认值 必填 描述
percent number 0 否 百分比0~100。
show-info boolean false 否 在进度条右侧显示百分比。
border-radius number|string 0 否 圆角大小。
font-size number|string 16 否 右侧百分比字体大小。
stroke-width number|string 4 否 进度条线的宽度。
color string #0A59F7 否 进度条进行中颜色,同activeColor。
activeColor string #0A59F7 否 已选择的进度条的颜色。
backgroundColor string rgba(0,0,0,0.098) 否 未选择的进度条的颜色。
active boolean false 否 进度条从左往右的动画。
active-mode string backwards 否

- backwards: 动画从头播放。

- forwards:动画从上次结束的位置开始接续播放。

起始版本: 1.0.3

duration number 30 否 进度增加1%所需毫秒数。
bindactiveend eventhandle - 否 动画完成事件。

示例:

hxml文件:

<view class="container">
  <view class="page-body">
    <view class="page-section">
      <view style="padding: 0 40rpx" class="page-section-title">动态设置</view>
      <view class="page-section-spacing">
        <progress
          percent="{{percent}}"
          show-info="{{showInfo}}"
          border-radius="{{borderRadius}}"
          font-size="{{fontSize}}"
          stroke-width="{{strokeWidth}}"
          color="{{color}}"
          activeColor="{{activeColor}}"
          backgroundColor="{{backgroundColor}}"
          active="{{active}}"
          active-mode="{{activeMode}}"
          bindactiveend="activeEndEvent"
          duration="{{duration}}"/>
      </view>

      <view class="page-section-setting">
        <view class="page-section-title">set active-mode:动画播放方式。</view>
        <view class="weui-cell weui-cell_input">
          <input value="{{activeMode}}" bindchange="setActiveMode" placeholder="backwards/forwards"/>
        </view>
      </view>

      <view class="page-section-setting">
        <view class="page-section-title">set show-info :显示百分比。</view>
        <view class="weui-cell weui-cell_input">
          <input value="{{showInfo}}" bindchange="setShowInfo" placeholder="true/false"/>
        </view>
      </view>

      <view class="page-section-setting">
        <view class="page-section-title">set active:进度条从左往右的动画。</view>
        <view class="weui-cell weui-cell_input">
          <input value="{{active}}" bindchange="setActive" placeholder="true/false"/>
        </view>
      </view>

      <view class="page-section-setting">
        <view class="page-section-title">set percent:百分比0~100。</view>
        <view class="weui-cell weui-cell_input">
          <input class="weui-input" value="{{percent}}" bindblur="setPercent"/>
        </view>
      </view>

      <view class="page-section-setting">
        <view class="page-section-title">set border-radius:圆角大小。</view>
        <view class="weui-cell weui-cell_input">
          <input type="text" value="{{borderRadius}}" bindblur="setBorderRadius"/>
        </view>
      </view>

      <view class="page-section-setting">
        <view class="page-section-title">set font-size:右侧百分比字体大小。</view>
        <view class="weui-cell weui-cell_input">
          <input type="text" value="{{fontSize}}" bindblur="setFontSize"/>
        </view>
      </view>

      <view class="page-section-setting">
        <view class="page-section-title">set stroke-width:进度条线的宽度。</view>
        <view class="weui-cell weui-cell_input">
          <input class="weui-input" value="{{strokeWidth}}" bindblur="setStrokeWidth"/>
        </view>
      </view>

      <view class="page-section-setting">
        <view class="page-section-title">set duration:进度增加1%所需毫秒数。</view>
        <view class="weui-cell weui-cell_input">
          <input class="weui-input" value="{{duration}}" bindblur="setDuration"/>
        </view>
      </view>

      <view class="page-section-setting">
        <view class="page-section-title">set color:进度条进行中颜色。</view>
        <view class="weui-cell weui-cell_input">
          <input type="text" value="{{color}}" bindblur="setColor"/>
        </view>
      </view>

      <view class="page-section-setting">
        <view class="page-section-title">set activeColor:已选择的进度条的颜色。</view>
        <view class="weui-cell weui-cell_input">
          <input type="text" value="{{activeColor}}" bindblur="setActiveColor"/>
        </view>
      </view>

      <view class="page-section-setting">
        <view class="page-section-title">set backgroundColor:未选择的进度条的颜色。</view>
        <view class="weui-cell weui-cell_input">
          <input type="text" value="{{backgroundColor}}" bindblur="setBackgroundColor"/>
        </view>
      </view>
    </view>
  </view>
</view>

js文件:

const dataNormalize = (str) => {
  let json;
  try {
    json = JSON.parse(str);
  } catch {
    console.error('dataNormalize error');
  }
  const baseObject = {
    [str]: json ? json : str,
    'object': {},
    'null': null,
    'undefined': undefined,
    'false': false
  };
  return baseObject[str];
};

Page({
  data: {
    showInfo: false,
    active: true,
    activeMode: 'backwards',
    percent: 100,
    borderRadius: 0,
    fontSize: 16,
    strokeWidth: 4,
    duration: 30,
    color: '#0A59F7',
    activeColor: '#0A59F7',
    backgroundColor: '#00000019'
  },
  setActiveMode(event) {
    console.info('setActiveMode', event.detail.value);
    this.setData({
      activeMode: dataNormalize(event.detail.value)
    });
  },
  setShowInfo(event) {
    console.info('setShowInfo', event.detail.value);
    this.setData({
      showInfo: dataNormalize(event.detail.value)
    });
  },
  setActive(event) {
    console.info('setActive', event.detail.value);
    this.setData({
      active: dataNormalize(event.detail.value)
    });
  },
  setPercent(event) {
    console.info('setPercent', event.detail.value);
    this.setData({
      percent: dataNormalize(event.detail.value)
    });
  },
  setBorderRadius(event) {
    console.info('setBorderRadius', event.detail.value);
    this.setData({
      borderRadius: dataNormalize(event.detail.value)
    });
  },
  setFontSize(event) {
    console.info('setFontSize', event.detail.value);
    this.setData({
      fontSize: dataNormalize(event.detail.value)
    });
  },
  setStrokeWidth(event) {
    console.info('setStrokeWidth', event.detail.value);
    this.setData({
      strokeWidth: dataNormalize(event.detail.value)
    });
  },
  setDuration(event) {
    console.info('setDuration', event.detail.value);
    this.setData({
      duration: dataNormalize(event.detail.value)
    });
  },
  setColor(event) {
    console.info('setColor', event.detail.value);
    this.setData({
      color: dataNormalize(event.detail.value)
    });
  },
  setActiveColor(event) {
    console.info('setActiveColor', event.detail.value);
    this.setData({
      activeColor: dataNormalize(event.detail.value)
    });
  },
  setBackgroundColor(event) {
    console.info('setBackgroundColor', event.detail.value);
    this.setData({
      backgroundColor: dataNormalize(event.detail.value)
    });
  },
  activeEndEvent(event) {
    // event.detail内容举例为:{"curPercent":0}
    console.info('progress组件发生了activeEnd事件,携带数据为:', event.detail);
  }
});

css文件:

.page-section {
  width: 100%;
  margin-bottom: 60rpx;
}

.page-section-setting {
  border-radius: 40rpx;
  border: 1px solid #ccc;
  margin: 20rpx 10rpx;
  padding: 20rpx 0;
}

.page-section-title {
  font-size: 32rpx;
  margin-bottom: 10rpx;
  padding: 20rpx;
  font-weight: 800;
  color: #0A59F7;
}

.swiper-item {
  display: block;
  height: 100%;
}

.view-example {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 400rpx;
  height: 300rpx;
  margin: 0 auto;
  padding: 20rpx;
  border: 1px solid #ccc;
}

.bg-red {
  background-color: red;
}

.bg-blue {
  background-color: blue;
}

.bg-green {
  background-color: green;
}

button {
  margin-left: 40rpx;
}

switch {
  margin-left: 40rpx;
}

.weui-cell_input {
  background-color: rgba(0, 0, 0, 0.047);
  margin: 0 40rpx;
}