写一个 vue步骤条 直接用

效果

写一个步骤条 直接上代码 直接使用就可

在这里插入图片描述

  • 使用
<template>
        <div>
            <zl-step 
            :active.sync="active" :stepArr="stepArr" 
            :width="width" 
            ></zl-step>
            <el-button @click="active--">上一步</el-button>
            <el-button @click="active++">下一步</el-button>
        </div>
</template>
<script>
  export default {
    data() {
      return {
        width:'200px',
        active:1,
        stepArr:[
            {title:'步骤1'},
            {title:'步骤2'},
            {title:'步骤3'},
            {title:'步骤4'},
        ]
      };
    },
    created(){
    },
    methods:{
    }
  };
</script>
  • 组件代码
<template>
  <ul class="zl-step" >
        <li 
        :class="{cur:active>=index}" 
        v-for="(item,index) in stepArr" 
        :style="{
            width:width,
            color:active>=index?color||'#fff':'#666',
            'background':active>=index?background||'#66B1FF':'#d7d8da'
        }" 
        :key="index"
        >
            <span>{{item.title}}</span>
            <div 
            v-if="index<stepArr.length-1" 
            :class="active>=index?'jiaoActive':'jiao'"
            :style="{
                color:active>=index?color||'#fff':'#666',
                'border-left-color':active>=index?background||'#66B1FF':'#d7d8da'
            }" 
            ></div>
            <div class="interval"></div>
        </li>
    </ul>

</template>

<script>
export default {
  name: 'ZlStep',
  props: {
    active: {
      type: Number,
      default: 0
    },
    stepArr: {
      type: Array,
      default: () => []
    },
    width: {
      type: String,
      default: '100%'
    },
    background: {
      type: String,
      default: '#66B1FF'
    },
    color: {
      type: String,
      default: '#fff'
    },
    height: {
      type: String,
      default: '40px'
    }
  },
  watch: {
    active (a) {
      if (a <= 0) {
        this.$emit('update:active', 0);
        console.log('已经是最小值了' + a);
      }
      if (a > this.stepArr.length - 1) {
        this.$emit('update:active', this.stepArr.length - 1);
        console.log('已经是最大值了' + a);
      }
    }
  },
  data () {
    return {

    };
  }
};

</script>

<style scoped >
    .zl-step{
        list-style: none;
        font-size: 14px;
        height: 40px;
        display: flex;
        justify-content: center;
        align-items: center;
        margin: 10px auto;
    }
    li{
        height: 40px;
        background: #d7d8da;
        color:#666;
        text-align: center;
        line-height: 40px;
        font-weight: 500;
        /*width: 20%;*/
        /*flex-basis: 100%;*/
        position: relative;
    }
    /*三角形绘制*/
    .jiao{
        width: 0;
        height: 0;
        border-top: 20px solid transparent;/*高度一半*/
        border-left: 20px solid #d7d8da; /*调整宽度*/
        border-bottom: 20px solid transparent;/*高度一半*/
        position: absolute;
        right:-20px;/*跟宽度保持一致*/
        top:0;
        z-index: 9999;
    }
    .jiaoActive{
        width: 0;
        height: 0;
        border-top: 20px solid transparent;/*高度一半*/
        border-left: 20px solid #E8514A; /*调整宽度*/
        border-bottom: 20px solid transparent;/*高度一半*/
        position: absolute;
        right:-20px;/*跟宽度保持一致*/
        top:0;
        z-index: 2;
    }
    /*大3个px的边 26-20/2*/
    .interval{
        width: 0;
        height: 0;
        border-top: 26px solid transparent;/*高度一半*/
        border-left: 26px solid #fff; /*调整宽度*/
        border-bottom: 26px solid transparent;/*高度一半*/
        position: absolute;
        right:-26px;/*跟宽度保持一致*/
        top:-6px;
        z-index: 1;
    }
</style>

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值