您现在的位置是:群英 > 开发技术 > web开发
如何用JS在Vue中制作柱状图对比画面
Admin发表于 2022-05-26 17:13:20745 次浏览
这篇文章给大家介绍了“如何用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中制作柱状图对比画面的介绍,本文内容仅供参考,有需要的朋友可以借鉴了解看看,希望对大家学习或工作,想要了解更多欢迎关注群英网络,小编每天都会为大家更新不同的知识。

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

相关信息推荐
2022-08-31 17:23:54 
摘要:本篇文章给大家快速讲解JavaScript是如何操作元素的内容,很简单,希望对需要的朋友有所帮助!
2021-11-17 18:05:58 
摘要:这篇文章给大家分享的是pthreads v3中synchronized的用法。synchronized能够做同步处理,小编觉得挺实用的,因此分享给大家做个参考,文中示例代码介绍的非常详细,感兴趣的朋友接下来一起跟随小编看看吧。
2022-07-04 17:24:47 
摘要:Go语言内置的flag包实现了命令行参数的解析,flag包使得开发命令行工具更为简单,下面通过本文给大家详细介绍下golang中的标准库flag相关知识,感兴趣的朋友一起看看吧
云活动
推荐内容
热门关键词
热门信息
群英网络助力开启安全的云计算之旅
立即注册,领取新人大礼包
  • 联系我们
  • 24小时售后:4006784567
  • 24小时TEL :0668-2555666
  • 售前咨询TEL:400-678-4567

  • 官方微信

    官方微信
Copyright  ©  QY  Network  Company  Ltd. All  Rights  Reserved. 2003-2019  群英网络  版权所有   茂名市群英网络有限公司
增值电信经营许可证 : B1.B2-20140078   粤ICP备09006778号
免费拨打  400-678-4567
免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
微信公众号
返回顶部
返回顶部 返回顶部