首页前端开发其他前端知识如何用JS在Vue中制作柱状图对比画面

如何用JS在Vue中制作柱状图对比画面

时间2024-03-27 16:48:03发布访客分类其他前端知识浏览702
导读:这篇文章给大家介绍了“如何用JS在Vue中制作柱状图对比画面”的相关知识,讲解详细,步骤过程清晰,对大家进一步学习和理解“如何用JS在Vue中制作柱状图对比画面”有一定的帮助,希望大家阅读完这篇文章能有所收获。下面就请大家跟着小编的思路一起...
这篇文章给大家介绍了“如何用JS在Vue中制作柱状图对比画面”的相关知识,讲解详细,步骤过程清晰,对大家进一步学习和理解“如何用JS在Vue中制作柱状图对比画面”有一定的帮助,希望大家阅读完这篇文章能有所收获。下面就请大家跟着小编的思路一起来学习一下吧。


本文实例为大家分享了vue中使用js制作进度条式数据对比动画的具体代码,供大家参考,具体内容如下

实现的效果:(初始化以及浏览器resize的时候两侧的条形为向两侧递增的动画,其中两端的数字也是递增的动画)

html部分:

div class="no-ivatargo-chart-b">
    
 div class="investment-ability">
    
  div class="title">
    
   span>
    您的投资能力分析/span>
    
  /div>
    
  div class="investment-ability-picture-outer-container">
    
   div class="investment-ability-picture-container">
    
    div class="investment-ability-picture-header"
      ref="allline">
    
     span>
    我/span>
    
     span>
    平均/span>
    
    /div>
    
    div class="investment-ability-picture"
      v-for="(item, index) in abilityarr"
      :key="index">
    
     div class="investment-ability-picture-top">
    
      div class="investment-left">
    
       div class="left-icon-outer">
    
        div class="left-icon-inner">
    /div>
    
       /div>
    
       span>
{
{
item.title}
}
    /span>
    
      /div>
    
      div class="investment-right">
    
       div class="investment-info">
    
        span class="my-color">
{
{
item.score | scorefilter}
}
    /span>
    
        div class="all-line">

         div class="my-line"
           :style="{
'width': item.mywidth}
    ">
    /div>

         div class="other-line"
           :style="{
'width': item.averagewidth}
    ">
    /div>
    
        /div>
    
        span class="average-color">
{
{
item.average | scorefilter}
}
    /span>
    
       /div>
    
      /div>
    
     /div>
    
    /div>
    
    div class="investment-ability-picture-footer">
    
     span>
    100/span>
    
     span>
    0/span>
    
     span>
    100/span>
    
    /div>
    
   /div>
    
  /div>
    
 /div>
    
/div>
filters: {

 scorefilter (val) {

  if (!isnan(val)) {

   return number(val)  10 ? `0${
parseint(val)}
` : parseint(val)
  }
 else {

   return ''
  }

 }

}

css部分:

.no-ivatargo-chart-b {
    
 width: 100%;
    
 overflow: hidden;
    
 display: flex;
    
 flex-direction: column;
    
 font-size: 14.76px;
    
 color: #bfbfbf;
    
 background-color: #0f1318;

 .title {
    
  display: flex;
    
  align-items: center;
    
  font-size: 17.22px;
    
  color: #bfbfbf;
    
  margin-bottom: 15px;

 }

 .investment-ability-picture-header {
    
  width: 400px;
    
  margin-left: 130px;
    
  display: flex;
    
  align-items: center;
    
  justify-content: space-around;
    
  margin-bottom: 10px;
    
  color: #fff;

 }

 .investment-ability-picture-outer-container {
    
  display: flex;
    
  justify-content: center;
    
  align-items: center;
    
  height: calc(100% - 50px);

  .investment-ability-picture-container {
    
   display: flex;
    
   flex-direction: column;

   .investment-ability-picture {
    
    display: flex;
    
    flex-direction: column;
    
    margin-bottom: 10px;

    .investment-ability-picture-top {
    
     display: flex;

     .investment-left {
    
      font-size: 14.76px;
    
      color: #bfbfbf;
    
      width: 100px;
    
      display: flex;
    
      align-items: center;

      .left-icon-outer {
    
       width: 14px;
    
       height: 14px;
    
       background-color: #3fb050;
    
       border-radius: 50%;
    
       position: relative;
    
       margin-right: 5px;

       .left-icon-inner {
    
        position: absolute;
    
        width: 5px;
    
        height: 5px;
    
        top: 50%;
    
        left: 50%;
    
        transform: translate(-50%, -50%);
    
        background-color: #fff;
    
        border-radius: 50%;

       }

      }

     }

     .investment-right {
    
      display: flex;
    
      align-items: center;
    
      justify-content: space-between;

      .investment-info {
    
       display: flex;
    
       align-items: center;
    
       justify-content: space-between;

       .all-line {
    
        width: 400px;
    
        height: 10px;
    
        background-color: #57606e;
    
        border-radius: 2px;
    
        margin-left: 10px;
    
        margin-right: 10px;
    
        position: relative;

        .my-line {
    
         width: 0;
    
         height: 10px;
    
         position: absolute;
    
         top: 0;
    
         right: 200px;
    
         background-color: #f5a623;
    
         border-top-left-radius: 2px;
    
         border-bottom-left-radius: 2px;

        }

        .other-line {
    
         width: 0;
    
         height: 10px;
    
         position: absolute;
    
         top: 0;
    
         left: 200px;
    
         background-color: #1890ff;
    
         border-top-right-radius: 2px;
    
         border-bottom-right-radius: 2px;

        }

       }

       .my-color {
    
        width: 20px;
    
        color: #f5a623;

       }

       .average-color {
    
        width: 20px;
    
        color: #1890ff;

       }

      }

     }

    }

    .investment-ability-picture-bottom {
    
     display: flex;
    
     flex-direction: column;
    
     background-color: #ccc;
    
     width: 400px;
    
     margin-left: 130px;
    
     padding: 5px;
    
     color: #000;

    }

   }

  }

 }

 .investment-ability-picture-footer {
    
  width: 400px;
    
  margin-left: 130px;
    
  display: flex;
    
  align-items: center;
    
  justify-content: space-between;
    
  color: #fff;

 }

}

js部分:

1.子组件当中

mounted () {
    
 let that = this
 window.onresize = () =>
 {
    
  cleartimeout(that.resizetimer)
  that.resizetimer = settimeout(() =>
 {

   that.handlegetallwidth()
  }
, 1000)
 }
    
 this.$nexttick(() =>
 {
    
  cleartimeout(this.resizetimerb)
  this.resizetimerb = settimeout(() =>
 {

   this.handlegetallwidth()
  }
, 200)
 }
)
}


// methods当中
handlegetallwidth () {

 this.$emit('getallwidth', this.$refs.allline.offsetwidth)
}

2.父组件当中

getalllinewidth (data) {

 this.alllinewidth = data
 this.calculateivatargo()
}
,
// 给条形图添加计算宽度,并形成动画
calculateivatargo () {
    
 this.mytimerarr.foreach((value, index) =>
 {

  clearinterval(value)
 }
    )
 this.averagetimerarr.foreach((value, index) =>
 {

  clearinterval(value)
 }
    )
 this.mytimerarr = []
 this.averagetimerarr = []
 let myval = []
 let averageval = []
 this.myabilityarr.foreach((value, index) =>
 {
    
  myval[index] = 0
  averageval[index] = 0
  this.mytimerarr[index] = setinterval(() =>
 {
    
   if (myval[index] >
 number(this.alllinewidth) * number(value.score) / 200 || !value.score) {

    clearinterval(this.mytimerarr[index])
    value.score ? myval[index] = number(this.alllinewidth) * number(value.score) / 200 : myval[index] = 0
    this.$set(value, 'mywidth', myval[index] + 'px')
    this.$set(value, 'mynum', value.score)
   }
 else {

    myval[index]++
    this.$set(value, 'mywidth', myval[index] + 'px')
    this.$set(value, 'mynum', myval[index] / 2)
   }

  }
    , 5)
  this.averagetimerarr[index] = setinterval(() =>
 {
    
   if (averageval[index] >
 number(this.alllinewidth) * number(value.average) / 200 || !value.average) {

    clearinterval(this.averagetimerarr[index])
    value.average ? averageval[index] = number(this.alllinewidth) * number(value.average) / 200 : averageval[index] = 0
    this.$set(value, 'averagewidth', averageval[index] + 'px')
    this.$set(value, 'averagenum', value.average)
   }
 else {

    averageval[index]++
    this.$set(value, 'averagewidth', averageval[index] + 'px')
    this.$set(value, 'averagenum', averageval[index] / 2)
   }

  }
, 5)
 }
)
}
    



以上就是关于如何用JS在Vue中制作柱状图对比画面的介绍,本文内容仅供参考,有需要的朋友可以借鉴了解看看,希望对大家学习或工作,想要了解更多欢迎关注网络,小编每天都会为大家更新不同的知识。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

vuejs进度条

若转载请注明出处: 如何用JS在Vue中制作柱状图对比画面
本文地址: https://pptw.com/jishu/654349.html
电商系统如何统计订单收益,用java有哪些解决方案 新手如何快速掌握path、url、http模块的使用

游客 回复需填写必要信息