利用CSS clip 實現音頻播放圓環進度條教程執行個體

來源:互聯網
上載者:User
 突然有需求要做一個圓環的音頻播放進度條(效果),自己琢磨嘗試了半天,也沒有實現。最後度娘一下,才知道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%*/    transform: 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",        "timeupdate":function(){//監聽timeupdate事件,也就是音頻當前播放進度發生改變響應的事件            /*            *audio.getAttr("currentTime" 擷取當前播放的時間 s            *audio.getAttr("duration") 擷取音頻時間長度            *它們的比正好就是當前播放進度            *再乘以360轉換為進度條應該旋轉的角度            */            process=audio.getAttr("currentTime")/audio.getAttr("duration")*360;             parseInt(process)===180&&addClass(slice,"gt50");//當等於50%時,使用fill佔滿50%的進度條              bar.style="transform:rotate("+(process)+"deg)";//根據播放進度設定更新進度條            }        }    });circleProgress.addEventListener("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視頻教程

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.