css3clip实现圆环进度条的⽰例代码
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;
borderboxborder-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>
div{
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>
<div class="box">
<div class="clip">
<div class="left"></div>
<div class="right width-none"></div>
</div>
<div class="num">
</div>
</div>
<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');
ve('auto');
} else if(rotate > 50){
ve('width-none');
clip.classList.add('auto');
}
rotate++;
ansform = '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来控制旋转⾓度并将百分⽐显⽰在页⾯上
写在最后
如果上⾯的解释看不明⽩,索性就不要看了,把代码放在本地调试下,⾃⼰去理解。
别钻⽜⾓尖,代码是最好的语⾔。
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论