vue实现 24小时刻度间断显示展示

根据24小时刻度线将工作时段进行表示展示

实现出发点,即利用组件的进度条,将24段div包裹的进度条组装成一个完整刻度线(生成一个组件,通过for循环遍历出来)
实现效果图:
在这里插入图片描述
实现代码,封装内部组件timebar.vue

<template>
    <div>   
        <span >{{time}}</span>
        <div class="bar">
        <q-linear-progress  size="10px"  :value="progress" />
        </div>
    </div>    
</template>

<script>
export default {
    props:{
        time:{type:Number},
       
    },
    data() {
        return {
            progress: 0,
        }
    },

    methods: {
        setFull(){
            this.progress = 1;
        },
    },
}
</script>
<style lang="scss" scoped>
    .bar{
        width:30px;
        height: 10px;
        border-right: 1px solid black;
        margin-top:4px;
    }
</style>

在父组件中定义组件名称,并for循环处对应的效果:

<q-card-section class="q-pt-none">
 <div class="container" v-for="(item,index) in validTimeList" :key="index"  >
    <div style="marginTop:18px;marginRight:18px;width:16%">{{item.date_s.substring(0,10)}}<span style="marginLeft:16px;">{{item.day_time}}</span></div>
    <div v-for="(item,tkey) in 24" :key="tkey">
      <Timebar :ref="`bar_${index}_${tkey+1}`" :time="tkey+1"  />
    </div>
  </div>
</q-card-section>

后端返回的vaildTimeList的数据的格式如下图所示:
在这里插入图片描述
ref的值进行双重组合命名为保证名称不重复,在v-for循环下的ref类型会被转化为数组形式,因此取值的时候需要通过[0]进行精确取值;

js取值代码实现功能:

this.validTimeList.forEach((item,index)=>{
    if(item.time.length == 0){
      return 
    }else {
      item.time.forEach(items=>{
        this.$nextTick(()=>{
            this.$refs[`bar_${index}_${items.hour}`][0].setFull();
        })
      })
    }
  })
  • 使用vue中的nextTick的主要解决获取不到dom的报错;
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值