css 前端实现通过css动画实现进度条动态加载效果

15 篇文章 0 订阅
2 篇文章 0 订阅

在这里插入图片描述

效果图

在这里插入图片描述

代码

CommonProcess.vue 进度条动态加载组件代码

<!-- 进度条组件 -->
<template>
  <div class="common_process">
    <div v-for="(item, index) in dataList" :key="processType + index" class="common_process_item">
      <div class="common_process_item_dept cyan">
        <div>
          <span class="common_process_item_dept_index">NO.{{ index + 1 }}</span>
          {{ item[bmmcField] }}
        </div>
        <div v-if="processType === 'jysg'">{{ item[slField] | noDataFilter }}</div>
      </div>
      <div class="common_process_item_line">
        <div
          class="common_process_item_line_process"
          :style="{ '--width': (item[slField] / total) * 100 + '%' }"
        />
      </div>
    </div>
  </div>
</template>

<script>
export default {
  name: 'CommonProcess',
  components: {},

  props: {
    processType: {
      type: String,
      // required: true
      default: 'jysg'
    },
    dataList: {
      type: Array,
      // required: true
      default: () => {
        return [...Array(10).keys()]
          .map((num) => {
            return {
              bmmc: '部门' + (num + 1),
              sl: num
            }
          })
          .reverse()
      }
    },
    total: {
      type: [Number, String],
      // required: true
      default: [...Array(10).keys()].reduce((a, b) => a + b, 0)
    },
    bmmcField: {
      type: String,
      default: 'bmmc'
    },
    slField: {
      type: String,
      default: 'sl'
    }
  }
}
</script>

<style lang='scss' scoped>
.common_process {
  padding: 0 10px;
  &_item {
    padding: 7px 0;
    &_dept {
      display: flex;
      justify-content: space-between;
      margin-bottom: 5px;
      padding-right: 5px;
      font-size: 13px;
      &_index {
        padding: 2px 3px;
        border-radius: 3px;
        background: linear-gradient(90deg, #236cdc 0%, #00c0ff 100%);
        font-weight: bold;
        color: #fff;
      }
    }
    &_line {
      height: 8px;
      background-color: rgba(64, 158, 255, 0.1);
      border-top-right-radius: 8px;
      border-bottom-right-radius: 8px;
      &_process {
        position: relative;
        width: var(--width);
        height: 100%;
        background: linear-gradient(90deg, #236cdc 0%, #00c0ff 100%);
        animation: move 1s; /* 【主要代码】添加动画 */

        @keyframes move {  /* 【主要代码】添加动画 */
          0% {
            width: 0%;
          }
          100% {
            width: var(--width);  /* 【主要代码】宽度不固定,需要计算,通过 style 属性传入 --width */
          }
        }

        &::after {
          content: '';
          position: absolute;
          top: -2px;
          right: 0;
          width: 6px;
          height: 12px;
          border-radius: 2px;
          background-color: #fff;
          box-shadow: 0 0 10px #faad14;
        }
      }
    }
  }
}
</style>

使用 “进度条动态加载” 组件

<template>
	<CommonProcess v-if="select === 'ybsg'" />
</template>

<script>
import CommonProcess from './CommonProcess'

export default {
  name: 'Accident',
  components: {
    CommonProcess
  },
}
</script>
  • 28
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现一个圆形进度条动态效果,可以使用CSS中的@keyframes动画和transform属性。 首先,创建一个包含圆形进度条的div元素,并设定其宽高和边框样式,使它呈现为圆形。 然后,使用CSS的@keyframes创建一个动画序列,在序列中设置进度条的旋转角度。例如,可以从0°开始旋转,到360°结束,表示进度条的完整程度。 接下来,在CSS中,为进度条的div元素添加animation属性,将刚才创建的动画序列应用于进度条上,并设定动画的持续时间、重复次数等。 最后,通过设置transform-origin属性,将进度条的旋转中心设置为圆心,使得进度条动画在圆形元素中心点进行旋转,形成动态效果。 例如,下面是一个实现50%进度的圆形进度条CSS代码示例: ```css .circle { width: 100px; height: 100px; border: 5px solid #ccc; border-radius: 50%; animation: progress 2s linear infinite; transform-origin: center center; } @keyframes progress { 0% { transform: rotate(0deg); } 100% { transform: rotate(180deg); } } ``` 这个示例中,圆形进度条的宽高为100px,边框为5px粗的灰色线条。动画序列progress中,进度条从0°开始旋转到180°,持续2秒,线性变化,并无限循环播放。进度条的旋转中心被设置为圆心。 这样,通过CSS实现了一个圆形进度条动态效果。可以根据需要修改代码中的数值,实现不同的进度和动画效果

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值