视频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
利用CSSclip实现音频播放圆环进度条教程实例
2020-11-27 18:51:43 责编:小采
文档

?突然有需求要做一个圆环的音频播放进度条(上图效果),自己琢磨尝试了半天,也没有实现。最后度娘一下,才知道css还有一个clip属性,完美实现需求。分享一下,说不定能帮其它小伙伴。至于有没有用,那就不知道了,who care!OK,费话打住,Let's go!

CSS clip 属性

??先简单了解一下css clip属性

说明

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

shape 设置元素的形状。唯一合法的形状值是:rect (top, right, bottom, left)

auto 默认值。不应用任何剪裁。

inherit 规定应该从父元素继承 clip 属性的值。

使用

??其实原理就是:通过剪裁使一个正方形p只显示右半部分,再通过剪裁在这个p里做一个带边框(边框大小就是进度条的大小)的左半圆,因为p只显示右半部分,正好将这个半圆剪裁掉了也就看不到了。然后结合rotate让这个半圆旋转,就实现了50%内的进度条,当超过50%时,取消对p的剪裁,再使用一个半圆来保存50%的进条,就实现一个100%的进度条效果。贴上代码,然后再对关键代码用注释解释。

/*Css部分*/
.circleProgress_wrapper{/*设置圆环的大小*/
 margin: auto;
 width: 200px;
 height: 200px;
 border-radius: 50%;
 cursor: pointer;
}
.slice{ /*这是一个裁去了左半部分,只显示右半部分的p*/
 position: absolute; /*必须是绝对定位元素,clip属性才会有效*/
 width: 100%;
 height: 100%;
 clip:rect(0,200px,200px,100px);/*top:0,right:200,bottom:200,left:100裁剪出右半部*/
}
.slice.gt50{/*当进度超过50%时,取消剪裁*/
 clip:rect(auto,auto,auto,auto);
}
.bar,.fill{ /*两个只显示左半部分的半圆*/
 position: absolute;
 box-sizing: border-box;
 width: 100%;
 height: 100%;
 border: 4px rgba(255, 249, 0, 0.77) solid;/*设置进度条大小和颜色值*/
 border-radius: 50%;
 clip: rect(0,100px,200px,0);/*top:0,right:100,bottom:200,left:0裁剪出左半部*/
}
.slice.gt50 .fill{/*当进度超过50%时,让fill旋转180度填充50%*/
 trans
for
m: rotate(180deg);
}
<!--html 部分 -->
<p class="circleProgress_wrapper">
 <p id="slice_wrapper" class="slice"> 
 <p class="bar pre50"></p>
 <p class="fill"></p>
 </p>
</p>
//javscript部分
<script type="text/
javascript
" src="src/audioPlayPlugin.
js
"></script>
<script>
var bar=
document
.querySelector(".slice>.bar"),
 process=0,
 circleProgress=document.querySelector(".circleProgress_wrapper"),
 slice=document.getElementById("slice_wrapper");
var audio=
new
 audioController({ //创建一个音频
对象
 src:"
file
/test1.mp3",
 "
time
up
date
":function(){//监听timeupdate
事件
,也就是音频当前播放进度发生改变响应的事件
 /*
 *audio.getAttr("
current
Time" 获取当前播放的时间 s
 *audio.getAttr("duration") 获取音频时长
 *它们的比正好就是当前播放进度
 *再乘以360转换为进度条应该旋转的角度
 */
 process=audio.getAttr("currentTime")/audio.getAttr("duration")*360;
 parseInt(process)===180&&add
Class
(slice,"gt50");//当等于50%时,使用fill占满50%的进度条
 bar.style="transform:rotate("+(process)+"deg)";//根据播放进度设置
更新
进度条
 }
 }
 });
circleProgress.addEvent
List
ener("click",function(){ //点击播放
 if(audio.getAttr("paused")){ 
 audio.play()
 }
else
{
 audio.pause()
 }
 });
 function addClass(element,className){/*添加类名,完整代码已省略*/
 ...
 }
</script>

完整的Demo,这里用了我写一个audioPlayPlugin.js,对audio标签的常用操作进行了一些简单的封装。github地址,coding地址

最后,有啥我没说清楚或者说错了的,欢迎大家留言,大家一起学习,共同进步么。

【相关推荐】

1. 特别推荐:“php程序员工具箱”V0.1版本下载

2. 免费css在线视频教程

3. php.cn独孤九贱(2)-css视频教程

下载本文
显示全文
专题