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

加载进度围绕一个圆 js

加载进度围绕一个圆的效果通常是通过SVG或者Canvas来实现的。以下是一个使用SVG和JavaScript实现的基本示例:

基础概念

  • SVG (Scalable Vector Graphics): 一种基于XML的图像格式,用于描述二维矢量图形。
  • Canvas: HTML5的一个元素,提供了一个可以通过JavaScript脚本来绘制图形的区域。
  • 动画: 通过定时器(如requestAnimationFrame)不断更新图形属性来实现动态效果。

优势

  • 灵活性: SVG和Canvas都提供了丰富的API来创建复杂的图形和动画。
  • 性能: 对于简单的图形和动画,SVG通常更优;对于复杂的图形和大量的绘制操作,Canvas性能更好。
  • 兼容性: 现代浏览器普遍支持SVG和Canvas。

类型

  • SVG动画: 利用SVG的<animate>元素或者JavaScript来控制属性变化。
  • Canvas动画: 使用canvas.getContext('2d')来绘制,并通过JavaScript定时更新。

应用场景

  • 网站加载指示器: 显示页面加载进度。
  • 应用程序启动画面: 提供视觉反馈,告知用户应用正在启动。
  • 任何需要动态显示进度的场景

示例代码(使用SVG)

代码语言:txt
复制
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Loading Circle</title>
<style>
  #progressCircle {
    transform: rotate(-90deg);
  }
</style>
</head>
<body>
<svg width="100" height="100">
  <circle id="progressCircle" cx="50" cy="50" r="45" stroke="#ddd" stroke-width="10" fill="none" />
  <circle id="progressRing" cx="50" cy="50" r="45" stroke="#007bff" stroke-width="10" fill="none" stroke-dasharray="0, 283" />
</svg>
<script>
  const circle = document.getElementById('progressRing');
  let radius = circle.r.baseVal.value;
  let circumference = radius * 2 * Math.PI;
  circle.style.strokeDasharray = `${circumference} ${circumference}`;
  circle.style.strokeDashoffset = circumference;

  function setProgress(percent) {
    const offset = circumference - percent / 100 * circumference;
    circle.style.strokeDashoffset = offset;
  }

  // 模拟加载进度
  let progress = 0;
  const interval = setInterval(() => {
    progress += 1;
    setProgress(progress);
    if (progress >= 100) clearInterval(interval);
  }, 50);
</script>
</body>
</html>

遇到问题的原因及解决方法

  • 动画卡顿: 可能是因为浏览器在每一帧中执行的工作太多,或者JavaScript执行效率不高。可以通过优化代码,减少每一帧的计算量,或者使用requestAnimationFrame代替setInterval来改善。
  • 图形渲染不正确: 检查SVG或Canvas的坐标和尺寸设置是否正确,确保没有数学错误。
  • 兼容性问题: 确保使用的API在目标浏览器中得到支持,必要时使用polyfill。

通过上述方法,可以创建一个平滑的加载进度圆环,并且可以根据实际需求进行调整和优化。

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

相关·内容

js - 预加载+监听图片资源加载制作进度条

这两天遇到一个新需求:一个一镜到底的h5动画。因为功能的特殊性,就要求我们提前监听页面的静态图片是否全部加载完毕。即处理预加载。...注意划重点是js的属性。...为了友好的用户体验,你在后台加载图片的时候,用户不能只看到一个加载中,等半天不知道到底有没有反应。 所以我们要给用户一个及时的反馈,就要获取图片加载的进度。...思路就是 : 加载进度 = 已加载图片资源个数/总的图片资源个数*100+'%'; 有了公式,又有之前我们准备的sum(当前加载个数),这个加载进度轻而易举就能得到了: let progress =...100:progress 如果加载进度想做成进度条效果,只需要把得到的progress值赋给进度条的宽度即可。 至于进度条怎么做,看我这篇博文。

9.8K22
  • NProgress.js - 前端全站进度条插件 - 给你的网站添加一个加载进度条

    正巧前几天发现因为网站带宽的原因,一些页面加载会花一些时间,页面没有任何动静仿佛会让人浏览体验变差,因为太穷无奈只有在不花钱的情况下提升一点点浏览体验(不知道是不是因为我强迫症的原因),这时候给网站添加一个加载进度条...NProgress.js就是一个不错的选择了 0x01 NProgress.js介绍 NProgress是一个前端全站进度条UI插件,作者是来自菲律宾马尼拉的@Rico Sta Cruz。...中的位置,因为主题自带了一个pjax加载动画,我们先把它注释掉 然后把上面提到的方法与对应的pjax事件绑定 完成了与pjax的绑定,接下来是第一次加载页面时加载进度条,在任意位置插入script....start()事件展示进度条并逐渐增加,文章加载完毕后执行.done()事件 0x05 总体效果 目前还存在一个bug,评论ajax在文章内部点击浏览器刷新后会失效,虽然触发条件比较难,但是身为强迫症留着这个...bug心里很不是舒服,所以如果有前端大佬请务必联系我帮助我修复,小弟必有重谢 总体效果参考我现在的博客,个人认为在加载页面的时候看着进度条一点一点的加载还是比干等着要舒服的多。

    6.2K20

    为 Vue 的惰性加载加一个进度条

    如果通过按需加载,用户将不需要下载他们当前不需要的资源。 Vue.js 没有为动态模块提供任何加载指示器相关的控件。...首先在 components 目录中创建一个新文件 eventHub.js: import Vue from 'vue' export default new Vue() 然后把 Webpack 配置为禁用预取和预加载...在根文件夹中创建一个 vue.config.js 文件并添加禁用预取和预加载的相关配置: module.exports = { chainWebpack: (config) => {...不过可以创建一个进度条,并使它在页面加载时完成。 由于不能真正反映进度,所以描绘的进度只是进行了随机跳跃。...总结 在本文中,我们禁用了在 Vue 应用中的预取和预加载功能,并创建了一个进度条组件,该组件可显示以模拟加载页面时的实际进度。

    3.3K30

    使用pace.js美化你的网站加载进度条

    前言 最近做网站体验优化的时候突然发现一个好东西,pace.js(加载进度条插件),gzip之后只有几kb, 简单好用,特地分享出来,也作为自己的一个学习总结。...pace.js介绍 pace.js是一个自动加载页面进度栏的小插件,它可以自动监视您的Ajax请求,事件循环滞后,文档就绪状态以及页面上的元素来确定进度。...,当然我们也可以很方便的基于它去修改成更加定制化的加载进度样式....每个源都应该具有一个.progress属性,或者.elements是具有.progress属性的对象列表的 属性。Pace将自动处理所有缩放,以使进度更改对用户而言看起来很平滑。...如果我们想使用该信息源(根本不需要),请指定一个或多个选择器。

    2.4K30

    JS实现一个可控制的进度条

    写在前面 进度条一直以来都是很多地方都可以用的,那么很多的时候其实我们都是自己在网上找代码,直接使用的,很少有人自己写源码的,今天呢我们就简单的实现一个进度条的效果,没有做美化,喜欢做美化的可以自己做一下美化...源码已经放到Github上:进度条源码 一如既往的看效果: ? 好吧,效果还是一如既往的丑,简单的说一下怎么实现这样的效果,还是和之前一样我们分析一下难点在哪?...只要解决这三个问题,这个进度条就解决了,至于颜色怎么改变这些就不是什么难点了。 首先怎么是div的宽度不固定呢?...} #pro_div{ height: 1.5rem; width: 3rem; float: left; } js.../jquery-1.11.2.min.js" type="text/javascript" charset="utf-8"> <input type

    4.5K10

    怎么写一个vue-插件? loader加载进度条示例

    前文 要写一个vue的组件 要么根据项目来写 要么是自己构造轮子 看过很多组件的写法, 无论是你怎么做, 都离不开三个东西 vue实例, dom, 你要实现的逻辑 代码地址 github https:...$loader = Loader.setDefaultOptions({maximum : 75, color : '#f00'}) ps: setDefaultOptions() 传入一个对象 提供初始化设置...可对以下参数进行初始化设置 maximum : 75, //start 方法最大进度 | number color : '#f00' //进度条染色 | 16进制...height: '2.5' //进度条高度 | number | string timer: '1000' //finish调用后 进度条消失 | number 使用示例 //loader...组件提供两个调用方法 start finish * start 进度条每100ms前进1% 最大80% 并且不会消失 * finish 进度进度100% 1s 后消失并remove dom this.

    88650

    一篇文章教会你使用JS+CSS实现一个简单加载进度条的效果

    大家好,我是前端进阶者,今天给大家来做个小项目,一起来看看吧~ 一、前言 我们经常在网页上 ,游戏界面加载时会看到加载进度条的效果,我们往往会以为这些加载进度条的效果,很难实现。...今天教大家JS+CSS结合做简单一个加载进度条的效果。 ? 二、项目准备 软件:HBuilderX。...开始进度 结束进度 5.start()方法,添加定时器。...2、点击开始进度按钮,加载进度。显示进度加载情况。 ? 3、加载到100% 停止定时器! ? 4、按钮结束进度按钮,停止定时器。直接从当前进度停止。 ?...此进度条是DIV+CSS制作实现,通过对DIV宽度按照百分比来实现百分比进度条效果,大家可以将背景美化、边框美化实现自己需要的漂亮美化的进度条效果。 代码很简单,希望对你有所启发。

    2.4K10

    《前端5分钟》之使用pace.js美化你的网站加载进度条

    前言 最近做网站体验优化的时候突然发现一个好东西,pace.js(加载进度条插件),gzip之后只有几kb, 简单好用,特地分享出来,也作为自己的一个学习总结。...pace.js介绍 pace.js是一个自动加载页面进度栏的小插件,它可以自动监视您的Ajax请求,事件循环滞后,文档就绪状态以及页面上的元素来确定进度。...,当然我们也可以很方便的基于它去修改成更加定制化的加载进度样式....每个源都应该具有一个.progress属性,或者.elements是具有.progress属性的对象列表的 属性。Pace将自动处理所有缩放,以使进度更改对用户而言看起来很平滑。...如果我们想使用该信息源(根本不需要),请指定一个或多个选择器。

    2.1K20

    在另一个进程正在进行时如何显示加载进度条?

    在 Tkinter 中,如果你希望在另一个进程(例如在后台运行的任务)正在进行时显示加载进度条,可以使用 ttk.Progressbar 组件来显示进度条,并通过使用 多线程 来避免界面冻结。...下面我将展示如何在后台运行一个耗时任务时,同时显示进度条,直到任务完成。...1、问题背景在wxPython中,正在构建一个RSS feed聚合器客户端,其中一个想要实现的功能是刷新函数,该函数可以刷新feed并显示任何新文章。...因此,创建了一个带有加载进度条的wx.Dialog类,持续7秒。希望在抓取所有文章时显示此对话框和进度条。通过threading模块尝试了这种方法,但无济于事。...2.2 代码示例以下是一个示例应用程序,演示如何从线程中定期更新进度条小组件(适用于wxPython 2.8):import timeimport wx​from threading import Thread​from

    8000

    一个预加载网站,提升网站速度的 JS - instant.page

    当用户悬停了 65 毫秒时,有一次机会在两个链接上单击,因此此时 instant.page 开始预加载,平均留下超过 300 毫秒的页面来预加载。...您还可以在悬停上预加载,或在链接可见后立即预加载,并在用户开始按下鼠标时触发单击,使您的页面成为世界上最快的页面。 移动端:用户在发布显示屏之前开始触摸其显示屏,平均留出90 毫秒用于预加载页面。...by67kQnR+pyfy8yWP4kPO12fHKRLHZPfEsiSXR8u2IKcTdxD805MGUXBzVPnkLHw"> 2.自托管文件 (推荐) 只需将下面下载地址里的 js...文件 上传到自己服务器,然后在 标签之前根据路径添加下面的代码即可(强烈建议服务器在国内的朋友使用) js" type="module..."module"> 代码二(快速) js

    1.3K30

    transform rotate实现环形进度条

    一、做好效果如下 二、思路分析 主要实现方法: transform: rotate(xxdeg) 实现圆环,如果单通过一个圆环来实现,则整个圆环上的颜色无法实现部分动,这时候就需要遮罩 左右各一个矩形区域...,设置  overflow: hidden; 里面放一个圆,两个举行的总宽度为一个圆的直径 每个矩形展示一半圆,需要将右边圆的位置进行偏移,以展示另一半 通过一个矩形遮住一半圆的方案,交替旋转两遍的圆...给圆形上下左右的边分别设置宽度及颜色,一半加载前的颜色,一半加载完的颜色,这里注意四个边宽度要一致,否则就不是正圆了 给圆形默认设 45 度,将颜色分界线刚好放在正中间 计算度数与进度的关系,通过 js...viewport" content="wclassth=device-wclassth, initial-scale=1.0" /> 环形进度条...}deg)`; } else { // 否则,旋转左侧圆环 180/50 代表 半个圆代表

    1.2K30

    小程序实践:基础内容之progress组件,及如何自定义实现一个环形进度条?

    3)已经加载完的进度条progress怎么点击某个按钮让它重新加载呢?4)能否实现一个圆环形进度条呢?5)progress 右边的进度百分比数字的颜色怎么设置呢?...在这个示例中,码农以onTapProgressBar这个单击后触发的函数模拟网络加载的进度事件。 每单击一次,进度+5,到100时停止。每次进度值变化,都附有一个动画。动画基本是连续和细腻的。...但如果加载任务小,时间短,这个动画也是一扫而过,基本是看不到的。 下面看一下相关问题: 1)如何实现一个下载文件并显示动态进度条的功能? ?...3)已经加载完的进度条progress怎么点击某个按钮让它重新加载呢?...上面是绿色的圆。

    5.5K50

    原生实现环形进度条

    介绍 引自MDN 介绍 CSS 函数 conic-gradient() 创建一个由渐变组成的图像,渐变的颜色围绕一个中心点旋转(而不是从中心辐射)进行过渡。锥形渐变的例子包括饼图和色轮。...默认值为 0deg,即从圆的顶部开始。 at position(可选):定义渐变的中心点。默认值为 center,即元素的中心。...--> 0% 此时页面: 剩下来就需要使用js...了 梳理一下思路: 通过js动态控制外边圆圈的锥形渐变的角度值 同步更新里面的数值 来吧,开整....let progress = 0; // 初始状态 进度数值 为0 定义一个定时器,用持续更新状态 这里需要注意的是, 一个圆圈为360度,因为我们css属性中的锥形渐变 依赖此数值,但是我们希望在进度数值中需要显示的是百分比的形式

    12210

    使用这 6个Vue加载动画库来减少我们网站的跳出率

    顾名思义,这是一个非常简单的组件,但功能仍然非常强大。 Vue Simple Spinner提供了可定制加载样式。...如果你想要的是一个真正的进度条而不是旋转动画,Vue Radial Progress 一个非常棒的库。 Vue Radial Progress 可以在在进度栏中设置步骤数以及用户当前所处的步骤。...这个库还有一个好用的特性就是加载时,用户点击遮罩,可以取消加载,并触发一个事件,我们可以使用该事件取消正在运行的任何任务。 添加此功能,可以允许用户自行决定任务何时花费太长时间来加载和退出。...Vue Loading Button 是一种简单而有效的方式,可以向用户显示某些内容正在加载。 它所做的只是在按钮被点击时添加一个转轮动画。但有了平滑的动画,它可以创建一个无缝的外观,使网站流行。...然后,将下面内容添加到src/main.js文件中。

    1K10
    领券