千家信息网

Vue中怎么使用js制作进度条式数据对比动画

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本文小编为大家详细介绍"Vue中怎么使用js制作进度条式数据对比动画",内容详细,步骤清晰,细节处理妥当,希望这篇"Vue中怎么使用js制作进度条式数据对比动画"文章能帮助大家解决疑惑,下面跟着小编的
千家信息网最后更新 2026年11月02日Vue中怎么使用js制作进度条式数据对比动画

本文小编为大家详细介绍"Vue中怎么使用js制作进度条式数据对比动画",内容详细,步骤清晰,细节处理妥当,希望这篇"Vue中怎么使用js制作进度条式数据对比动画"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

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

HTML部分:

您的投资能力分析
我 平均
{{item.title}}
{{item.score | scoreFilter}}
{{item.average | scoreFilter}}
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)  })}

读到这里,这篇"Vue中怎么使用js制作进度条式数据对比动画"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。

动画 数据 进度 制作 文章 部分 内容 条形 组件 妥当 两端 宽度 思路 效果 数字 新知 时候 更多 步骤 浏览器 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 深圳恒合互联网络科技有限公司 互联网科技的发展 互联网金融公司科技 贷财互联网科技 居家互联网科技有限公司 互联网科技项目计划书材料类 宁夏科技产业互联网案例 重庆互联网医院沙龙医盟信息科技 科技赋能视角下互联网保险发展 互联网时代的科技公司 科技互联网的核心竞争力 北京市互联网新科技 黑云互联网科技有限公司 西安有哪些互联网高科技企业 米泉互联网科技专业怎么样 互联网科技的前景 恒生科技指数 中概互联网 互联网领先科技成果宣传视频 科技互联网企业在行动 科技发展第三阶段互联网时代 极限挑战互联网科技 融势互联网科技 齐家互联网科技有限公司 东莞新华互联网科技学校 科技互联网海报 互联网第三次科技革命特征 郑州欣桑互联网科技有限公司 易企秀互联网科技是做什么的 科技互联网公司两年变化 数字互联网科技有限公司
0