首页 > 其他分享 >实现环形进度条效果

实现环形进度条效果

时间:2023-11-25 19:06:50浏览次数:37  
标签:效果 进度条 graph top transform 环形 border 200px

好基友扔过来一张效果图,简单分析下,一起看看如何实现它吧。

实现环形进度条效果_进度条

  1. 一个半环形用于表示 0 - 100%。
  2. 半环形开头有一个圆点作为修饰。
  3. 半环形两端需要呈现为圆角。

通过 div 实现

先画一个长方形。

<div class="graph"></div>
.graph {
  width: 200px;
  height: 100px;
  border: 20px solid rgb (58, 215, 217);
}

实现环形进度条效果_圆角_02

接下来把长方形转换为半环形。

.graph {
   width: 200px;
   height: 100px;
   border: 20px solid rgb (58, 215, 217);
+  border-radius: 0 0 200px 200px;
+  border-top: none;
}

实现环形进度条效果_圆角_03

给环形开头添加圆点修饰,实际等于添加到长方形的左上角。

<div class="graph">
+  <div class="dot"></div>
</div>
.graph {
+ position: relative;
  width: 200px;
  height: 100px;
  border: 20px solid rgb (58, 215, 217);
  border-radius: 0 0 200px 200px;
  border-top: none;
}

+.dot {
+  position: absolute;
+  top: 5px;
+  left: -15px;
+  z-index: 9999;
+  width: 12px;
+  height: 12px;
+  border-radius: 50%;
+  background-color: #fff;
+  transform-origin: center top;
+}

实现环形进度条效果_进度条_04

实现环形进度条效果_进度条_05

环形有了,如何实现进度条效果呢?让半环形旋转,并隐藏超出部分。可以给元素添加 transform 使其旋转。

.graph {
  position: relative;
  width: 200px;
  height: 100px;
  border: 20px solid rgb (58, 215, 217);
  border-radius: 0 0 200px 200px;
  border-top: none;
+ transform: rotate (150deg);
}

实现环形进度条效果_圆角_06

半环形并没有根据中心点旋转,通过 transform-origin: center top 设置原点为中间顶部,即半环形的中心。

实现环形进度条效果_圆角_07

.graph {
  position: relative;
  width: 200px;
  height: 100px;
  border: 20px solid rgb (58, 215, 217);
  border-radius: 0 0 200px 200px;
  border-top: none;
+ transform-origin: center top;
  transform: rotate (150deg);
}

实现环形进度条效果_进度条_08

给环形添加一个父元素,并设置超出部分隐藏。

<div class="graph-wrapper">
  <div class="graph">
    <div class="dot"></div>
  </div>
</div>
.graph-wrapper {
  width: 200px;
  height: 100px;
  overflow: hidden;
  transform: rotate (90deg);
}

实现环形进度条效果_圆角_09

动态设置环形元素的 rotate 角度实就可以实现进度条效果了。0 - 100% 对应 180 - 360deg。

实现环形进度条效果_圆角_10

可以通过 JavaScript 设置半环形的进度。

function calculateValue(range, percentage) {
  const  [start, end] = range
  const result = start + (end - start) * percentage / 100;
  return result;
}

function renderGraph(percentage) {
  const deg = calculateValue ([180, 360], percentage);
  const el = document.querySelector ('.graph')
  el.style.transform = `rotate (${deg} deg)`
}

renderGraph (30) // 30%

总结

我们先使用 div 画了一个长方形,添加 borderborder-radius 属性使其转换为半环形,又通过 transform 属性使半环形可以旋转。接下来给半环形套了一层元素,超出部分隐藏,以实现进度条效果。

在博文开头处,我们对效果图进行了分析。其中,第 3 点 “半环形两端需要呈现为圆角” 还没有被支持。限于篇幅,将在接下来的博文中实现,最终效果如下图。

实现环形进度条效果_进度条_11

标签:效果,进度条,graph,top,transform,环形,border,200px
From: https://blog.51cto.com/u_16325023/8561547

相关文章

  • Vue3实现九宫格抽奖效果
    需求与效果需求:1、礼品根据后台配置生成2、跑马灯转动效果3、结果后台生成并且每个礼物概率不一样(概率这里不讨论)注意点:1、布局如何排列,是按照跑动排列还是从左至右自上而下排列2、点击按钮如何插入,DOM结构如何生成3、跑马效果如何实现,速度如何控制4、接口如何处理,包括接......
  • Vue3实现转盘抽奖效果
    1、实现转盘数据动态配置(可通过接口获取)2、背景色通过分隔配置3、转动速度慢慢减速,最后停留在每一项的中间,下一次开始从本次开始4、当动画停止后在对应事件中自定义生成中奖提示。5、本次中奖概率随机生成,也可自定义配置实现代码html<template><divclass="graph-page">......
  • 网页顶部添加阅读进度条方法(适用于任何网页)
    第一种方法顶部添加直接加入html,不需要分别放到css和js里<!--进度条--><style>progress{/*position:fixed;left:0;*//*right:0;*//*bottom:0;*//*top:0;width:100%;text-align:center;height:0.5rem;borde......
  • 制作逼真的圆形金属拉丝效果
    1、新建文件,大小1600*1600像素,分辨率72像素/英寸,填充黑色。新建图层,点击“椭圆工具”,按住shift键,在画布中央画一个正圆,填充”选择“渐变”,“渐变形式”选择“角度”。点击渐变条左下方的色标,点击色块,打开“拾色器”,设置颜色为e9edff,按住Alt键向左拖拽复制3个色标,位置分别设......
  • 添加请求loading效果
    概述在实际开发场景中,我们需要对每一次的请求做一个loading效果,使得让用户知道正在提交中,此时需要给用户添加loading提示好处节流处理:防止用户在一次请求还没回来之前,多次进行点击,发送无效请求友好提示:告知用户,目前是在加载中,请耐心等待,用户体验会更好步骤请求拦截器中,每......
  • C# 实现FULL JOIN 效果
    参考:https://dotnettutorials.net/lesson/full-outer-join-in-linq/思路就是先leftjoin再rightjoin,最后unionnamespaceTest{internalclassProgram{staticvoidMain(string[]args){//创建测试数据varlistA=n......
  • 前端必学——实现电商图片放大镜效果(附代码)
    放大镜可以说是前端人必须学会的程序之一,今天的案例为大家展示一下怎么实现放大镜的效果!效果图展示  整个效果就是当鼠标放到展示图上的时候,会出现一个遮罩层以及弹出来一个框展示一个详情图,并且鼠标移动的时候详情图跟着移动,鼠标离开详情图消失。HTML代码:<html><head><style>#sm......
  • Skeleton Screen/加载占位图流光闪动效果收集
    SkeletonScreenLoading,又叫SkeletonScreen/加载占位图,就是显示dom骨架,加上流光加载效果。骨架流光的原理,就是渐变色(linear-gradient多个颜色)+背景拉伸(background-size:400%100%)+背景移动(background-position)1.CSS实现SkeletonScreen(骨架屏)li{backgrou......
  • 本博客的SimpleMemory博客皮肤设置教程及效果
    博客样式设置本博客皮肤设计来自一位超级大佬所做大佬的GitHub项目地址:https://github.com/BNDong/Cnblogs-Theme-SimpleMemory大佬的博客园地址:https://www.cnblogs.com/BNDong第一步:获取权限开通博客园账号并且开通博客园后台设置的JS权限,并勾选博客皮肤为SimpleMemory。......
  • fgui在 cocos creator 如何让一个文本做成一个滚动的效果,使用 ts 脚本来实现
    在CocosCreator中使用FGUI(FairyGUI)实现文本的滚动效果,可以通过TypeScript脚本来实现。以下是一个简单的示例:首先,确保已经安装了FGUI插件,并且已经正确配置了TypeScript。然后,创建一个TypeScript脚本,例如ScrollText.ts,并将其附加到你的文本组件所在的节点上。下面是代......