02.可视化大屏分解动画

javascript 复制代码
<script setup lang="ts">
import { ref } from 'vue'
const dataList = ref([
  {
    name: '香蕉',
    value: 50
  },
  {
    name: '香蕉',
    value: 20
  },
  {
    name: '香蕉',
    value: 30
  }
])
const rankingTotal = ref(100)
</script>

<template>
  <div class="box-data">
    <div class="title">
      <span class="textTitle">水果排名</span>
    </div>
    <div style="width: 100%; height: 233px; color: #fff">
      <ul>
        <li v-for="(item, index) in dataList" :key="index" style="margin-top: 13px">
          <div style="margin: 0 0 10px 0">
            <span class="rank"
              ><i>TOP.{{ index + 1 }}</i></span
            >
            <span class="name">{{ item.name }}</span>
            <span class="progress">{{ item.value }}</span>
          </div>
          <div class="elProgress">
            <el-progress :percentage="(item.value / rankingTotal) * 100" :show-text="false" />
          </div>
        </li>
      </ul>
    </div>
  </div>
</template>

<style scoped lang="less">
.box-data {
  width: 355px;
  background-color: #031237;
  padding: 16px;
}
.title {
  position: relative;
  color: #ffffff;
  font-size: 16px;
  font-family: '微软雅黑';
  align-items: center;
  background-image: url(../assets/images2/Frame10053.png);
  background-repeat: no-repeat;
  background-size: 100%;
  margin-bottom: 5px;

  &::after {
    content: '';
    position: absolute;
    top: 0;
    width: 100px;
    height: 25px;
    background-image: linear-gradient(to right, transparent 0%, #3894c3 100%);
    animation: scanning 4s infinite linear;
    opacity: 0.5;
    border-radius: 5px;
  }

  .textTitle {
    display: inline-block;
    margin: 5px 0 0 20px;
  }
}

.rank {
  display: inline-block;
  width: 60px;
  height: 20px;
  line-height: 23px;
  text-align: center;
  background-color: #031237;
  border: 1px solid #2e6fb3;
  font-family: '隶书';
  color: #aec3dc;
  font-size: 14px;
}
.name {
  margin-left: 20px;
  font-size: 14px;
  color: #aec3dc;
}
.progress {
  font-size: 15px;
  font-weight: bold;
  color: #d6e9fd;
  float: right;
  margin-right: 10px;
}
.elProgress {
  animation: elPro 4s infinite;
}

// 进度条样式
::v-deep .el-progress {
  margin-left: 5px;
}
// 进度条底色
::v-deep .el-progress-bar__outer {
  background-color: #1c2a45;
  height: 3px !important;
  width: 98%;
}
// 进度条颜色
::v-deep .el-progress-bar__inner {
  background: linear-gradient(
    to right,
    rgba(22, 41, 82, 0.4) 10%,
    rgba(20, 67, 141, 0.5) 20%,
    rgba(37, 126, 227, 0.4) 30%,
    rgba(58, 151, 255, 0.8) 60%,
    rgba(132, 190, 255, 0.9) 70%
  );
}

@keyframes scanning {
  0% {
    left: 0;
    opacity: 0.7;
  }
  100% {
    left: 20%;
    opacity: 0;
  }
}

@keyframes elPro {
  0% {
    width: 0%;
  }
  100% {
    width: 100%;
  }
}
</style>
相关推荐
是一碗螺丝粉5 小时前
React Native 运行时深度解析
前端·react native·react.js
Jing_Rainbow5 小时前
【前端三剑客-9 /Lesson17(2025-11-01)】CSS 盒子模型详解:从标准盒模型到怪异(IE)盒模型📦
前端·css·前端框架
爱泡脚的鸡腿5 小时前
uni-app D6 实战(小兔鲜)
前端·vue.js
青年优品前端团队5 小时前
🚀 不仅是工具库,更是国内前端开发的“瑞士军刀” —— @qnvip/core
前端
北极糊的狐5 小时前
Vue3 中父子组件传参是组件通信的核心场景,需遵循「父传子靠 Props,子传父靠自定义事件」的原则,以下是资料总结
前端·javascript·vue.js
看到我请叫我铁锤6 小时前
vue3中THINGJS初始化步骤
前端·javascript·vue.js·3d
q***25216 小时前
SpringMVC 请求参数接收
前端·javascript·算法
q***33376 小时前
Spring Boot项目接收前端参数的11种方式
前端·spring boot·后端
烛阴6 小时前
从`new()`到`.DoSomething()`:一篇讲透C#方法与构造函数的终极指南
前端·c#
还债大湿兄6 小时前
阿里通义千问调用图像大模型生成轮动漫风格 python调用
开发语言·前端·python