首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

js css画圆环进度条

要在网页中使用 JavaScript 和 CSS 绘制一个圆环进度条,可以利用 HTML5 的 <canvas> 元素或者纯 CSS 结合 SVG 来实现。下面将介绍一种使用纯 CSS 和 SVG 实现圆环进度条的方法,并附带相关代码示例。

基本概念

圆环进度条通常由两个同心圆组成,外层为进度条的背景,内层根据进度动态变化,显示当前的完成度。通过调整内层圆的旋转角度或宽度,可以实现进度的可视化效果。

优势

  1. 响应式设计:基于 CSS 和 SVG,能够自适应不同屏幕尺寸。
  2. 性能高效:相比使用图片或复杂的动画,CSS 和 SVG 更加轻量,渲染性能更好。
  3. 易于定制:可以通过修改 CSS 样式轻松调整颜色、大小、动画速度等。

类型

  1. 基于 SVG 的圆环进度条:利用 SVG 的路径和动画实现。
  2. 基于 CSS 动画的圆环进度条:通过伪元素和旋转动画实现。

应用场景

  • 数据可视化:展示加载进度、完成度等。
  • 用户界面元素:如仪表盘、进度指示器等。
  • 营销页面:吸引用户注意力的动态效果。

实现方法

以下是使用纯 CSS 和 SVG 实现圆环进度条的示例代码:

代码语言:txt
复制
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>圆环进度条示例</title>
<style>
  .progress-container {
    position: relative;
    width: 150px;
    height: 150px;
  }
  
  .progress-container svg {
    transform: rotate(-90deg);
    width: 100%;
    height: 100%;
  }
  
  .progress-container circle {
    fill: none;
    stroke-width: 10;
    stroke-linecap: round;
  }
  
  .progress-container .background {
    stroke: #eee;
  }
  
  .progress-container .progress {
    stroke: #007bff;
    stroke-dasharray: 471; /* 2 * π * r (r=50) */
    stroke-dashoffset: 471;
    animation: draw 3s linear forwards;
  }
  
  @keyframes draw {
    to {
      stroke-dashoffset: 0;
    }
  }
</style>
</head>
<body>

<div class="progress-container">
  <svg viewBox="0 0 100 100">
    <circle class="background" cx="50" cy="50" r="50"></circle>
    <circle class="progress" cx="50" cy="50" r="50"></circle>
  </svg>
</div>

</body>
</html>

代码说明

  1. HTML 结构
    • 一个包含 SVG 的容器 .progress-container
    • SVG 内有两个 <circle> 元素,分别代表背景圆环和进度圆环。
  • CSS 样式
    • 设置容器的大小和位置。
    • 旋转 SVG 以便进度从顶部开始。
    • 定义背景圆环的颜色和样式。
    • 定义进度圆环的颜色、线宽、线帽样式。
    • 使用 stroke-dasharraystroke-dashoffset 控制进度显示。
    • 定义关键帧动画 draw,使进度圆环逐渐填充。

可定制性

  • 颜色:修改 .progress 类中的 stroke 属性即可更改进度条颜色。
  • 大小:调整 .progress-containerwidthheight,以及 SVG 中圆的 r 属性。
  • 动画速度:修改 animation: draw 3s linear forwards; 中的 3s 来调整动画时长。

常见问题及解决方法

  1. 进度条不显示或显示不正确
    • 确保 stroke-dasharray 的值等于圆的周长(2 * π * r)。
    • 检查 SVG 的 viewBox 是否正确设置,确保圆环在可视范围内。
  • 动画不流畅
    • 使用 will-change: transform;transform: translateZ(0); 来优化动画性能。
    • 确保浏览器支持 CSS 动画和 SVG 属性。
  • 响应式设计问题
    • 使用相对单位(如百分比)设置容器和 SVG 的尺寸。
    • 使用媒体查询根据不同屏幕尺寸调整样式。

总结

通过结合 CSS 和 SVG,可以轻松创建美观且高效的圆环进度条。这种方法不仅实现简单,而且具有良好的可定制性和响应式特性,适用于多种网页设计需求。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 自定义圆环进度条

    使用自定义控件绘制一个圆环,需要重现的方法是OnDraw()实现对view的绘制,从而输出符合自己需求的view控件 观察圆环的组成部分: 外层圆+中间百分比文字+不断变化进度的弧形圈 --->分析:每一个组成部分需要的属性...构成几个关键的自定义属性          1:外层圆的颜色          2:弧形进度圈的颜色          3:中间百分比文字的颜色          4:中间百分比文字的大小          5:圆环的宽度...(作为进度弧形圈的宽度)          6:*首页当中也有一个圆环进度,为了兼容使用首页的圆环进度,增加一个自定义属性,绘制进度弧形圈的风格(实心[Fill],空心[Stroken]) 分析完毕--.... 2:重写Ondraw方法   ---2.1:绘制最外层的圆          -关键方法canvas.drawCircle(center, center, radius, paint); //画出圆环...-- 圆环进度--> <cn.wh.ui.RoundProgress android:id="@+id/p_progresss"

    1.5K60

    自定义圆环进度条

    使用自定义控件绘制一个圆环,需要重现的方法是OnDraw()实现对view的绘制,从而输出符合自己需求的view控件 观察圆环的组成部分: 外层圆+中间百分比文字+不断变化进度的弧形圈 --->分析:...构成几个关键的自定义属性 1:外层圆的颜色 2:弧形进度圈的颜色 3:中间百分比文字的颜色 4:中间百分比文字的大小 5:圆环的宽度...(作为进度弧形圈的宽度) 6:*首页当中也有一个圆环进度,为了兼容使用首页的圆环进度,增加一个自定义属性,绘制进度弧形圈的风格(实心[Fill],空心[Stroken]) 分析完毕--.... 2:重写Ondraw方法 ---2.1:绘制最外层的圆 -关键方法canvas.drawCircle(center, center, radius, paint); //画出圆环...-- 圆环进度--> <cn.wh.ui.RoundProgress android:id="@+id/p_progresss"

    69610

    用初中数学知识撸一个canvas环形进度条

    周末好,今天给大家带来一款接地气的环形进度条组件vue-awesome-progress。近日被设计小姐姐要求实现这么一个环形进度条效果,大体由四部分组成,分别是底色圆环,进度弧,环内文字,进度圆点。...环形进度条设计稿 我的第一反应还是找现成的组件,市面上很多组件都实现了前3点,独独没找到能画进度圆点的组件,不然稍加定制也能复用。既然没有现成的组件,只有自己用vue + canvas撸一个了。...从设计稿我们可以直观地看到,整个环形进度条的最外围是由进度圆点确定的,而进度圆点的圆心在圆环圆周上。 ?...$refs.canvasDemo; var ctx = canvas.getContext('2d'); } } 画底色圆环 完成了上述步骤后,我们就可以着手画各个元素了。...任意角度画弧线和圆点 这样,一个基本的canvas环形进度条就成型了。 动画展示 静态的东西逼格自然是不够的,因此我们需要再搞点动画效果装装逼。 基础动画 我们先简单实现一个线性的动画效果。

    98220

    移动端圆环进度动画方案(透明背景-透明度圆环-css3版)

    css3简洁的实现。...js赋值的,那么问题来了,当我们在pc上看到流畅的旋转动画时,在安卓手机上,两个半圆环动画的衔接处,有时差!...思考下第一版方案失败的根本原因,就是整个圆环进度是由两个半圆环分别动画形成的,右侧圆环的旋转角度不是固定的,使用transition实现需要通过js动态添加旋转角度样式,js语句的执行使得两个圆环执行动画的时间差无法确定...那么换一种思维方式,我们有了第二版解决方案: 利用纯css控制两个半圆环动画的执行,让两个半圆环动画都固定旋转180度,时间差固定,我们要控制的就是可视区域的角度。...transform 1s linear 1s; -webkit-transition: -webkit-transform 1s linear 1s; } 所以动画是由css

    1.5K30

    移动端圆环进度动画方案(透明背景-透明度圆环-css3版)

    css3简洁的实现。...js赋值的,那么问题来了,当我们在pc上看到流畅的旋转动画时,在安卓手机上,两个半圆环动画的衔接处,有时差!...思考下第一版方案失败的根本原因,就是整个圆环进度是由两个半圆环分别动画形成的,右侧圆环的旋转角度不是固定的,使用transition实现需要通过js动态添加旋转角度样式,js语句的执行使得两个圆环执行动画的时间差无法确定...那么换一种思维方式,我们有了第二版解决方案: 利用纯css控制两个半圆环动画的执行,让两个半圆环动画都固定旋转180度,时间差固定,我们要控制的就是可视区域的角度。...transform 1s linear 1s; -webkit-transition: -webkit-transform 1s linear 1s; } 所以动画是由css

    1.5K80

    CSS波浪进度条

    今天,让我们一起来揭开一个神奇的面纱,学习如何创建一个令人印象深刻的波浪进度条效果 ,而无需任何编程经验! 点击查看页面效果 1....介绍 HTML和CSS是构建网页的基石,它们可以帮助我们实现各种令人赞叹的效果。在这个项目中,我们将探索一个简单的HTML和CSS组合,用于创建一个具有波浪效果的进度条。...这个容器通过CSS样式定义了它的外观,包括位置、大小、边框和圆角。...整体效果 通过将所有这些元素组合在一起,我们最终创建了一个漂亮的波浪进度条效果,用于展示进度并吸引用户的注意力。 9....结论 总结本博客的内容,我们已经了解了如何使用HTML和CSS创建这个令人印象深刻的波浪进度条效果,而无需编程经验。这个效果可以让你的网页更具吸引力,增强用户体验。

    17210

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券