vant步骤条,van-step自定义图标颜色

van-step自定义图标颜色

做项目遇到了步骤条,看了vant官网案例后感觉没问题,简单滴很。
vant官网示例
☝官方示例图
👇再来看看我的产品UI
在这里插入图片描述
看完感觉问题不大~ 不就是改改颜色,改改文字的位置么~

我着手去做的时候发现了问题,才发现我不太好改啊,下面针对我们产品我的问题,目前我项目用的vant版本2.11.0

问题1
目前我UI上有3种状态需要自定义①当前激活的②未激活的③已经激活过的这三种。但是目前我使用的2.11.0版本只支持自定义两种,第三种当前版本不支持。
在这里插入图片描述

问题2
我的文本竟然是在进度条的下方,并且vant不支持修改问题的位置。没有修改位置的属性。😒感觉好像我能用的了,难不成要我手写嘛?

问题3
由于我图标icon都是自定义的所以导致这个激活的进度条的这个紫色的颜色也不能用属性修改了。
在这里插入图片描述

于是经过我不断的尝试,修改改改改改,各种改,各种试,最终实现了。好像还不错的亚子。
最终效果

<!-- vant步骤条自定义 -->
<template>
  <div>
    <van-steps :active="currentSwipeItem" @click-step="onStep">
      <van-step v-for="(item, idx) in 5" :key="idx">
        <template v-slot:active-icon>

          <!-- 自定义激活时的样式 -->
          <div class="step-item">
            <div class="steps-active-icon">
              <!-- 如果有icon或者图片可以更换放在这里,我的比较简单,我直接css画个圆 -->
            </div>
            <!-- 一定要和激活状态写在一起,不然文字就去进度条上方了,不要文字这个可以不要 -->
            <span :class="currentSwipeItem === idx?'title-active':''">
              {{'Lv'+(idx+1)}}
            </span>
          </div>
        </template>
        <template v-slot:inactive-icon>
          <!-- 自定义未激活时的样式 由于版本问题,目前我只有slot两种,vant版本v2.12.7以上可以直接slot三种-->
          <div class="step-item">
            <!-- 未激活的样式 -->
            <div v-if="currentSwipeItem > idx" class="steps-inactive-icon">
              <!-- 如果有icon或者图片可以更换放在这里,我的比较简单,我直接css画个圆 -->
            </div>
            <!-- 激活并且完成的样式 -->
            <div v-else class="steps-finish-icon">
              <!-- 如果有icon或者图片可以更换放在这里,我的比较简单,我直接css画个圆 -->
            </div>
            <!-- 一定要和激活状态写在一起,不然文字就去进度条上方了,不要文字这个可以不要 -->
            <span :class="currentSwipeItem > idx?'title-inactive':'title-finish'">
              {{'Lv'+ (idx+1)}}
            </span>
          </div>
        </template>
      </van-step>
    </van-steps>
  </div>
</template>

<script>
export default {
  data () {
    return {
      currentSwipeItem: 0
    }
  },
  mounted () {
  },
  methods: {
    onStep(index){
      this.currentSwipeItem = index
    },
  }
}
</script>

<style lang="scss" scoped>
// 注意这是scss,如果没有sass自行粘贴出来
.van-steps {
  background: transparent; // 如果背景是白色就不需要了,默认是白色的
  width: 80%;
  margin: 80px auto;
  overflow: visible; //如果不需要文字,或者不需要调整位置,可以不设置

  .step-item {
    position: relative;
    span {
      position: absolute;
      top: 20px;
      left: -2px;
      z-index: 1;
      font-size: 10px;
      color: #999999;
    }
    .title-active {
      // 自定义文字激活
      font-weight: bold;
      color: #e61f20;
      left: -2px;
      font-size: 13px;
    }
    .title-inactive {
      // 自定义文字激活并且完成
      color: #e61f20;
    }
    .title-finish {
      //自定义未激活
      color: #999999;
    }
  }
  .steps-active-icon {
    width: 14px;
    height: 14px;
    box-sizing: border-box;
    background: #e61f20;
    border: 3px solid #ffc4c4;
    border-radius: 50%;
  }
  .steps-inactive-icon,
  .steps-finish-icon {
    width: 12px;
    height: 12px;
    box-sizing: border-box;
    background: #ffffff;
    border-radius: 50%;
  }
  .steps-inactive-icon {
    border: 3px solid #e61f20;
  }
  .steps-finish-icon {
    border: 3px solid #c8c8c8;
  }
  ::v-deep .van-step__circle-container {
    background-color: transparent; // 如果背景是白色就不需要了,默认是白色的
  }
  ::v-deep .van-step--horizontal .van-step__line {
    height: 4px; // 自定义调整进度条的粗细
    top: 28px; // 自定义调整进度条的位置
    background-color: #e4e4e4;
  }
  ::v-deep .van-step--finish .van-step__line {
    background-color: #e61f20; //自定义激活时进度条的颜色
  }
}
</style>

折腾了半天不容易,写个小文章记录一下~

### 如何根据校验结果动态改变 `el-steps` 步骤条的状态 在使用 Element UI 的 `el-steps` 组件时,可以通过绑定 `status` 属性来动态控制每一步的状态。以下是实现这一功能的具体方式: #### 动态更新状态的核心逻辑 通过 Vue 数据驱动视图的特点,可以将每个步骤的状态存储在一个数组中,并根据业务逻辑(如表单校验结果)动态修改该数组中的值[^1]。 ```javascript // 定义数据模型 data() { return { stepsStatus: ['wait', 'process', 'wait', 'wait'], // 初始状态设置 currentStepIndex: 0, // 当前激活的步骤索引 }; }, methods: { validateAndProceed(index) { // 验证并推进到下一步 const isValid = this.validateForm(); // 假设这是你的校验函数 if (isValid && index < this.stepsStatus.length - 1) { this.currentStepIndex++; // 更新当前步数索引 this.updateStepsStatus(this.currentStepIndex); // 调整状态 } }, updateStepsStatus(currentIndex) { // 根据当前索引调整状态 this.stepsStatus.fill('wait'); // 初始化所有状态为等待 for (let i = 0; i <= currentIndex; i++) { if (i === currentIndex) { this.stepsStatus[i] = 'process'; // 当前步骤正在处理 } else { this.stepsStatus[i] = 'success'; // 已完成的步骤标记为成功 } } }, validateForm() { // 示例校验逻辑 console.log('执行表单校验...'); return true; // 返回布尔值表示是否通过校验 } } ``` #### 使用模板渲染步骤条 在模板部分,利用 `v-for` 和 `stepsStatus` 数组动态绑定每一项的 `status` 属性。 ```html <template> <div> <!-- 渲染步骤 --> <el-steps :active="currentStepIndex" finish-status="success"> <el-step v-for="(step, index) in stepsTitles" :key="index" :title="step.title" :status="stepsStatus[index]" @click.native="validateAndProceed(index)"> </el-step> </el-steps> <!-- 每个步骤的内容区域 --> <slot name="first"></slot> <!-- 第一步内容 --> <!-- 下一步按钮 --> <button @click="validateAndProceed(currentStepIndex)">下一步</button> </div> </template> <script> export default { data() { return { stepsTitles: [ { title: '创建账户' }, { title: '填写基础信息' }, { title: '填写用户信息' }, { title: '注册成功' } ] }; } }; </script> ``` 上述代码展示了如何基于用户的输入和校验结果动态更改 `el-steps` 的状态。当某个步骤未通过校验时,可将其状态保持为 `'error'` 或其他提示性的样式[^2]。 --- ### 注意事项 - 如果需要支持错误状态下的图标自定义,可以在 `<el-step>` 中通过 `icon` 属性指定特定的图标类名。 - 对于频繁触发的操作(如点击按钮),建议引入防抖机制以优化用户体验。 ---
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值