利用圆锥渐变属性 conic-gradient() 实现仪表盘进度条效果

实现仪表盘初步思路

  • 利用 css 中 圆锥渐变属性 绘制出中心向四周发散的图形。
  • 添加遮挡物,与背景色一致,遮盖掉中心内容,达到环形效果。

实现步骤

圆形仪表盘背景

  • 绘制黑色圆形背景
<div class="circle">
</div>
<style lang="less" scoped>
.circle {width: 400px;height: 400px;background: #000;border-radius: 50%;
}
</style>

在这里插入图片描述

仪表盘渐变底色

  • 假如仪表盘数值在 120°,利用圆锥渐变属性,将 120° 到 360° 之间设置为透明色即可
  • 当前案例中 conic-gradient 的四个参数
    • 第一个渐变色
    • 第二个渐变色 + 渐变色的结束位置(仪表盘数值刻度)
    • 透明色(或背景色) + 透明色起始位置(仪表盘数值刻度)
    • 透明色(或背景色) + 结束刻度(360°)
<div class="circle"><div class="percentBox"></div>
</div>
<style lang="less" scoped>
.circle {width: 400px;height: 400px;background: #000;border-radius: 50%;.percentBox {width: 400px;height: 400px;background-image: conic-gradient(green,yellow 120deg,transparent 120deg,transparent 360deg);border-radius: 50%;}
}
</style>

在这里插入图片描述

遮挡物

  • 添加遮挡物,尺寸略小于渐变色部分,颜色设置成与背景同色
<div class="circle"><div class="percentBox"><div class="hide"></div></div>
</div>
<style lang="less" scoped>
.circle {margin: 30px;width: 400px;height: 400px;background: #000;border-radius: 50%;.percentBox {width: 400px;height: 400px;background-image: conic-gradient(green,yellow 120deg,transparent 120deg,transparent 360deg);border-radius: 50%;position: relative;.hide {width: 350px;height: 350px;border-radius: 50%;background: #000;position: absolute;left: 50%;top: 50%;transform: translate(-50%, -50%);}}
}
</style>

在这里插入图片描述

添加指针

  • 指针元素以底部中心(bottom center)为原点,进行旋转。即,将指针元素底部中心定位到仪表盘中心,根据实际角度,进行 rotate 旋转。
<div class="circle"><div class="percentBox"><div class="hide"></div><div class="pointer"></div></div>
</div>
<style lang="less" scoped>
.circle {margin: 30px;width: 400px;height: 400px;background: #000;border-radius: 50%;.percentBox {width: 400px;height: 400px;background-image: conic-gradient(green,yellow 120deg,transparent 120deg,transparent 360deg);border-radius: 50%;position: relative;.hide {width: 350px;height: 350px;border-radius: 50%;background: #000;position: absolute;left: 50%;top: 50%;transform: translate(-50%, -50%);}.pointer {width: 20px;height: calc(350px / 2);background: #666;position: absolute;left: 50%;top: calc((400px - 350px) / 2);transform: translateX(-50%) rotate(120deg);transform-origin: bottom center;}}
}
</style>

在这里插入图片描述

效果优化及代码

在这里插入图片描述

<template><div class="bg"><div class="circle"><divclass="percentBox":style="{'background-image': `conic-gradient(rgb(233, 212, 28),rgb(218, 115, 67) ${(percent / 100) * 360}deg,transparent ${(percent / 100) * 360}deg,transparent 360deg)`,}"><div class="hide"></div><divclass="pointer":style="{transform:`translateX(-50%) rotate(${(percent / 100) * 360}deg)`,}"></div><div class="text">{{ percent }}<span class="unit">%</span></div></div></div></div>
</template>
<script>
export default {name: "dashBoard",components: {},data() {return {percent: 69,};},mounted() {},methods: {},
};
</script>
<style lang="less" scoped>
.bg {width: 100%;height: 100%;background: #1b2d4f;padding: 30px;
}
.circle {width: 200px;height: 200px;background: #556fa1;border-radius: 50%;.percentBox {width: 200px;height: 200px;// background-image: conic-gradient(//   rgb(233, 212, 28),//   rgb(218, 115, 67) 120deg,//   transparent 120deg,//   transparent 360deg// );border-radius: 50%;position: relative;.hide {width: 180px;height: 180px;border-radius: 50%;background: #1b2d4f;position: absolute;left: 50%;top: 50%;transform: translate(-50%, -50%);}.pointer {width: 10px;height: calc(180px / 2);background: transparent;position: absolute;left: 50%;top: calc((200px - 180px) / 2);// transform: translateX(-50%) rotate(120deg);transform-origin: bottom center;&::after {content: "";width: 14px;height: 14px;border: 6px solid #fff;border-radius: 50%;position: absolute;top: -18px;left: 50%;transform: translateX(-50%);background-image: linear-gradient(90deg,rgb(218, 115, 67) 0,rgb(233, 212, 28) 100%);}}.text {position: absolute;left: 50%;top: 50%;transform: translate(-50%, -50%);font-size: 60px;font-weight: bold;color: rgb(218, 115, 67);background: linear-gradient(to bottom,rgb(233, 212, 28),rgb(218, 115, 67));-webkit-background-clip: text;-webkit-text-fill-color: transparent;.unit {font-size: 20px;}}}
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/498291.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java进阶-集合(3)与泛型

这次介绍集合中的Iterator迭代器&#xff0c;以及泛型。简单来说&#xff0c;泛型对集合的元素类型进行了限制&#xff0c;使用泛型可以在编译时检查类型安全&#xff0c;提高代码的重用率。内容如下 一、Iterator迭代器 1、概念 Iterator迭代器是一个接口&#xff0c;作用…

基于RISC-V架构的通信DSP的设计以及在5G RedCap基带中的应用(五)-基于RISC-V的RedCap DSP在5G基带中的应用

4 基于RISC-V的RedCap DSP在5G基带中的应用 4.1 基带处理器的关键任务和性能需求 基带处理器是移动通信设备中的关键部件&#xff0c;负责处理无线信号&#xff0c;包括信号的接收、发送和处理。在5G通信系统中&#xff0c;基带处理器的关键任务和性能需求包括以下几个方面&a…

吉瑞苍穹外卖如何拓展?已经经过不同公司多轮面试。项目中会问到哪些问题?以及问题如何解决?

别催了&#xff0c;别催了&#xff0c;先收藏吧。 作者大大正在加班加点完成。 文章会尽快发布&#xff0c;关注收藏&#xff0c;尽请期待。 叠一波甲&#xff1a; 文档也参考了其他作者大大的资料&#xff0c;都会给出相应的标注。 本文档仅供交流学习&#xff0c;不牟利贩…

GEE:基于Landsat5/7/8/9数据提取一个点的NDVI时间序列(1986-2024)

作者:CSDN @ _养乐多_ 本文将介绍,基于Landsat5/7/8/9数据提取一个点的NDVI时间序列,时间序列数据可以是1986-2024年所有可用数据,也可以是月度合成、年度合成或者指定间隔合成的时间序列。 结果如下图所示, 文章目录 一、代码框架二、代码链接三、完整代码一、代码框架…

K8s Pod资源管理组件

目录 Pod基础概念 在Kubrenetes集群中Pod有如下两种使用方式 pause容器使得Pod中的所有容器可以共享两种资源 网络 存储 总结 kubernetes中的pause容器主要为每个容器提供功能 Kubernetes设计这样的Pod概念和特殊组成结构的用意 通常把Pod分为以下几类 自主式Pod 控…

【Unity】如何在Unity 中创建带有缩放效果的滚动视图(具有吸附效果的实现与优化)?

效果预览&#xff1a; 目录 效果预览&#xff1a; 一、引言&#xff1a; 二、问题描述 三、解决方案&#xff1a; 三、优化&#xff1a; 四、结论 一、引言&#xff1a; 在Unity开发中&#xff0c;经常需要实现滚动视图&#xff08;ScrollView&#xff09;中的内容吸附到…

Nginx 常用的基础配置(前端相关方面)

Nginx是一款高性能的Web服务器和反向代理服务器&#xff0c;广泛应用于互联网领域。作为一名前端同学&#xff0c;了解并掌握Nginx的配置是非常有必要的。 安装Nginx sudo apt-get update sudo apt-get install nginx查看Nginx版本 nginx -v启动、停止、重启Nginx服务 sudo …

【GAD】动态图的半监督异常检测

SAD: Semi-Supervised Anomaly Detection on Dynamic Graphs Limitations of existing semi-supervised methodsContributionRelated workMethodDeviation Networks with Memory BankContrastive Learning for Unlabeled Samples Experiments少样本评估2D t-SNE可视化消融实验 …

C++之queue和dqueue

1、queue queue&#xff08;队列&#xff09;&#xff0c;一种数据结构&#xff0c;可以让某些数据结构的操作变得简单。队列&#xff08;queue&#xff09;最大的特点就是先进先出。就是说先放入queue容器的元素一定是要先出队列之后&#xff0c;比它后进入队列的元素才能够出…

Unity(第十一部)场景

游戏有多个场景组成&#xff08;新手村&#xff0c;某某副本&#xff0c;主城&#xff09; 场景是有多个物体组成&#xff08;怪物&#xff0c;地形&#xff0c;玩家等&#xff09; 物体是有多个组件组成&#xff08;刚体组件&#xff0c;自定义脚本&#xff09; 创建场景 编辑…

逆向案例三:动态xhr包中AES解密的一般步骤,以精灵数据为例

补充知识&#xff1a;进行AES解密需要知道四个关键字&#xff0c;即密钥key,向量iv,模式mode,填充方式pad 一般网页AES都是16位的&#xff0c;m3u8视频加密一般是AES-128格式 网页链接:https://www.jinglingshuju.com/articles 进行抓包结果返回的是密文&#xff1a; 一般思…

Sui主网升级至V1.19.1版本

其他升级要点如下所示&#xff1a; #16190, #16193 现在CLI正确处理并修复了交易没有输入或命令时的输出表格。例如&#xff0c;调用 client call — package 0x2 — module kiosk — function default 现在具有正确格式的输出。 #15928 Move编译器的一系列变更 添加了宏函…