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

实现环形进度条效果【一】

时间:2023-11-26 15:36:31浏览次数:34  
标签:效果 进度条 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);
}

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

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

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

<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;
+}


环形有了,如何实现进度条效果呢?让半环形旋转,并隐藏超出部分。可以给元素添加 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);
}

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

.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);
}

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

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

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

可以通过 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 点 “半环形两端需要呈现为圆角” 还没有被支持。限于篇幅,将在接下来的博文中实现,最终效果如下图。

标签:效果,进度条,graph,top,transform,环形,border,200px
From: https://www.cnblogs.com/guangzan/p/17855751.html

相关文章

  • 约瑟夫(环形链表)
    约瑟夫(环形链表)/***@author缪广亮*@version1.0*/classJoseph{publicstaticvoidmain(String[]args){CircleSingleLinkedListcircleSingleLinkedList=newCircleSingleLinkedList();circleSingleLinkedList.addBoy(5);circ......
  • 实现环形进度条效果
    好基友扔过来一张效果图,简单分析下,一起看看如何实现它吧。一个半环形用于表示0-100%。半环形开头有一个圆点作为修饰。半环形两端需要呈现为圆角。通过div实现先画一个长方形。<divclass="graph"></div>.graph{width:200px;height:100px;border:20pxsolidrgb......
  • 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......