视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
css3中clip实现圆环进度条
2020-11-27 18:49:21 责编:小OO
文档
本文主要和大家介绍了css3 clip实现圆环进度条的示例代码的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。

CSS中有一个属性叫做clip,为修剪,剪裁之意。

clip 属性剪裁绝对定位元素。这个属性用于定义一个剪裁矩形。对于一个绝对定义元素,在这个矩形内的内容才可见。出了这个剪裁区域的内容会根据 overflow 的值来处理。

环形进度条.gif

怎么实现这样一个圆环进度条的效果呢,可以使用canvas、svg、GIF等等方式,今天我们来说下使用css3怎么来实现。

实现思路

圆环很简单,一行cssborder-radius:50%即可实现,而且没有兼容性问题,什么,你说IE,让它滚...

我们这里需要三个圆环,一个整的,两个半的。大概画了下图

这里半圆环我使用了clip进行裁剪,主要代码如下,

.left{
 width: 200px;
 height: 200px;
 border-radius: 50%;
 border: 10px solid lightblue;
 position:absolute;
 top: -10px; /* 10的原因是因为边框是10个像素 */
 right: -10px;
 clip: rect(0 100px 200px 0); /* 上面为0 右边到100px 下面200px 左边到0 这个区域的我们裁剪出来 */ 
}

右边类似只是裁剪位置改了

.right{
 width: 200px;
 height: 200px;
 border-radius: 50%;
 border: 10px solid lightblue;
 position:absolute;
 top: -10px; /* 10的原因是因为边框是10个像素 */
 right: -10px;
 clip: rect(0 200px 200px 100px); /* 位置更改,计算可以参考上图 */ 
}

完整代码

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <meta http-equiv="X-UA-Compatible" content="ie=edge">
 <title>Document</title>
 <style>
 p{
 box-sizing: border-box;
 }
 .box{
 width: 200px;
 height: 200px;
 position: relative;
 background-color: #ccc;
 border-radius: 50%;
 left: 40%;
 top: 200px;

 }
 .num{
 position: absolute;
 top: 50%;
 left: 50%;
 background: #fff;
 border-radius: 50%;
 width: 180px; 
 height: 180px;
 transform: translate(-50%, -50%);
 text-align: center;
 line-height: 180px;
 font-size: 32px;
 }
 
 
 .clip{
 width: 200px;
 height: 200px;
 position: absolute;
 border: 10px solid #ccc;
 border-radius: 50%;
 clip: rect(0, 200px, 200px, 100px);
 }
 .left{
 width: 200px;
 height: 200px;
 position: absolute;
 border: 10px solid lightblue;
 border-radius: 50%;
 clip: rect(0 100px 200px 0);
 top: -10px;
 left: -10px;
 }
 .right{
 width: 200px;
 height: 200px;
 position: absolute;
 border: 10px solid lightblue;
 border-radius: 50%;
 clip: rect(0 200px 200px 100px);
 top: -10px;
 left: -10px;
 }
 .width-none{
 width: 0;
 }
 .auto{
 clip: auto;
 }
 </style>
</head>
<body>
 <p class="box">
 <p class="clip">
 <p class="left"></p>
 <p class="right width-none"></p>
 </p>
 <p class="num">

 </p>
 </p>
 <script >
 let clip = document.querySelector('.clip'),
 left = document.querySelector('.left'),
 right = document.querySelector('.right'),
 num = document.querySelector('.num'),
 rotate = 0;
 
 let loop = setInterval(() => {
 if(rotate >= 100){
 rotate = 0;
 right.classList.add('width-none');
 clip.classList.remove('auto');
 } else if(rotate > 50){
 right.classList.remove('width-none');
 clip.classList.add('auto');
 }
 rotate++;
 left.style.transform = 'rotate('+ 3.6*rotate + 'deg)';
 num.innerHTML = `${rotate}%`
 },100)

 </script>
</body>
</html>

简单说下上面的代码

1、首先隐藏了右半圆,这是因为我们需要旋转的是左半圆,我们可以等左半圆转到右边圆的位置再显示右 边,就是等到旋转到180度的时候。

2、同时我们看到主圆添加了clip: rect(0, 200px, 200px, 100px);裁剪样式,这是因为默认我们 进度是0%的,我们只显示右边的话才能隐藏左边,但是我们右边不是隐藏的吗?那显示它干嘛呢,因为 旋转左边的时候就看到转到右边的圆了。稍微有点绕,请结合代码,多多理解

3、等到左边旋转了180我们需要将右边显示出来,并且将box元素的裁剪设置为默认值,就是不裁剪,这 这样才能显示完整的左右两个圆。

4、最后我们使用js来控制旋转角度并将百分比显示在页面上

写在最后

如果上面的解释看不明白,索性就不要看了,把代码放在本地调试下,自己去理解。

别钻牛角尖,代码是最好的语言。

下载本文
显示全文
专题