整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          分享一個基于css3的炫酷圓形導航效果

          享一個基于css3的炫酷圓形導航效果

          不得不說,用css3自帶的transform、animation、transition實現一些常用的動畫效果簡直太方便了(jquery表示不服~^_^),再配合一些js的處理,有如神助,廢話不多說,給大家分享一個基于css3制作的炫酷圓形導航效果

          效果如下:

          基于css3的圓形導航效果

          哈哈,猴年生猴子,多應景。

          ps:順帶打個廣告,來后盾網學前端,各種大牛效果等著你,生猴子都是毛毛雨啦~

          效果源代碼:圓形導航demo

          【本文來自 孫琪崢博客 http://www.sunqizheng.com/,想獲取更好的頁面瀏覽效果或者有任何問題請進入博客,同時也可在博主評論區進行留言,讓博主為大家答疑解惑~】

          紹:

          這是一款使用 CSS 制作的優雅漂亮的圓形時鐘,時鐘清爽簡潔,看起來非常舒服。

          演示地址:

          https://www.361zy.com/demo/334/

          下載地址:

          https://cloud.06dn.com/s/Jnoia

          解壓碼:pWuLBIaF

          寫這篇文章之前,筆者查看了多篇博客,無奈前輩大多只是貼了代碼,沒有清晰明了的注釋,所以容易讓新人看得云里霧里。這里,筆者在弄明白原理后,對代碼進行了優化,決定寫(總結)一篇清晰、明了的圓形進度條的實現,以便后人能快速搞懂。

          一、實現原理

          首先,我們來一個(黑色)。
          接著,再來兩個半圓,將黑色的圓遮住。(為了演示,左右兩側顏色不一樣)
          這時候,我們順時針旋轉右側藍色的半圓,下面的黑色圓就會暴露出來,比如我們旋轉45度(12.5%),效果出來了。
          如果我們將藍色的右半圓同樣設置成灰色,看效果,一個12.5%的餅圖就出來了!

          OK,我們再旋轉更大的度數試試,比如40%(144度),50%(180度),60%(216度)如下圖。
          我們發現,旋轉180度之后右半圓與左半圓重合了,如果再旋轉,就會在右上角冒出來,顯然不是我們想要的。

          我們希望的是,繼續旋轉被黑色遮住。。。嗯。。。怎么做呢?

          我們將右側的圓回歸原位,把它刷成黑色(和底色一樣),然后旋轉左邊的半圓(它在右側半圓的更底層),這樣,它就會被右側半圓遮住了。好的,廢話不多說,我們將左側的半圓順時針旋轉45度,效果出來了。可以想象,繼續旋轉,180度的時候,就完全被右側半圓遮住,而左側底色全部暴露,這樣100%顯示出來了。

          最后,加上一個白色的小圓,放在正中間就行了。

          好的,到這里,我們已經明白如何實現的了。

          二、代碼實現

          html部分

          <div class="circle-bar">
           <div class="circle-bar-left"></div>
           <div class="circle-bar-right"></div>
           <!-- 遮罩層,顯示百分比 -->
           <div class="mask">
           <span class="percent">60%</span>
           </div>
          </div>
          

          css部分

           /*支持IE9及以上*/
           .circle-bar { font-size:200px; width: 1em; height: 1em; position: relative; background-color: #333; }
           .circle-bar-left,.circle-bar-right { width: 1em; height: 1em; background-color: #eee; }
           /*
           這里采用clip剪切了圓,實現左右兩個半圓,右半圓在后面,因此在更上一層,
           clip的用法參考:http://www.w3school.com.cn/cssref/pr_pos_clip.asp
           */
           .circle-bar-right { clip:rect(0,auto,auto,.5em); }
           .circle-bar-left { clip:rect(0,.5em,auto,0); }
           
           .mask { width: 0.8em; height: 0.8em; background-color: #fff;text-align: center;line-height: 0.2em; color:rgba(0,0,0,0.5); }
           .mask :first-child { font-size: 0.3em; height: 0.8em; line-height: 0.8em; display: block; }
           /*所有的后代都水平垂直居中,這樣就是同心圓了*/
           .circle-bar * { position: absolute; top:0; right:0; bottom:0; left:0; margin:auto; }
           /*自身以及子元素都是圓*/
           .circle-bar, .circle-bar > * { border-radius: 50%; }
           

          JavaScript實現

           //反正CSS3中的border-radius屬性IE8是不支持了,所以這里就用新方法吧getElementsByClassName()走起
           window.onload = function(){
          
           var circleBar = document.getElementsByClassName('circle-bar')[0];
           var percent = parseInt(circleBar.getElementsByClassName('percent')[0].firstChild.nodeValue);
           var color = circleBar.css('background-color');
           var left_circle = circleBar.getElementsByClassName('circle-bar-left')[0];
           var right_circle = circleBar.getElementsByClassName('circle-bar-right')[0];
          
           if( percent <= 50 ) {
           var rotate = 'rotate('+(percent*3.6)+'deg)';
           right_circle.css3('transform',rotate);
           }else {
           var rotate = 'rotate('+((percent-50)*3.6)+'deg)';
           right_circle.css ('background-color',color);//背景色設置為進度條的顏色
           right_circle.css3('transform','rotate(0deg)');//右側不旋轉
           left_circle.css3 ('transform',rotate);//左側旋轉
           }
           }
          
           //封裝了css3函數,主要是懶得重復書寫代碼,既然寫了css3函數,順便寫個css吧,統一樣式,好看一些
           Element.prototype.css = function(property,value){
           
           if ( value ) {
           //CSS中像background-color這樣的屬性,‘-’在JavaScript中不兼容,需要設置成駝峰格式
           var index = property.indexOf('-');
           if( index != -1 ) {
           var char = property.charAt(index+1).toUpperCase();
           property.replace(/(-*){1}/,char);
           }
           this.style[property] = value;
           }else{
           //getPropertyValue()方法參數類似background-color寫法,所以不要轉駝峰格式
           return window.getComputedStyle(this).getPropertyValue(property);
           }
           }
          
           //封裝一個css3函數,用來快速設置css3屬性
           Element.prototype.css3 = function(property,value){
           if( value ){
           property = capitalize(property.toLowerCase());
           this.style['webkit'+property] = value;
           this.style['Moz'+property] = value;
           this.style['ms'+property] = value;
           this.style['O'+property] = value;
           this.style[property.toLowerCase()] = value;
           }else{
           return window.getComputedStyle(this).getPropertyValue(
           ('webkit'+property)||('Moz'+property)||('ms'+property)||('O'+property)||property);
           //老實說,我不知道為什么要把不帶瀏覽器標記的放在最后,既然都這么用,我也這么做吧。不過這樣對現代瀏覽器來說可能并不好,判斷次數變多了
           }
           
           //首字母大寫
           function capitalize(word){
           return word.charAt(0).toUpperCase() + word.slice(1);
           }
           }
          

          jQuery實現

           $(function(){
          
           var percent = parseInt($('.mask :first-child').text());
           var baseColor = $('.circle-bar').css('background-color');
          
           if( percent<=50 ){
           $('.circle-bar-right').css('transform','rotate('+(percent*3.6)+'deg)');
           }else {
           $('.circle-bar-right').css({
           'transform':'rotate(0deg)',
           'background-color':baseColor
           });
           $('.circle-bar-left').css('transform','rotate('+((percent-50)*3.6)+'deg)');
           }
           })
          
          

          jQuery這么簡單好用,為什么還要寫JavaScript?

          一來,學習JavaScript的使用,畢竟有些方法可能是不太熟悉的,多查查文檔,混個眼熟。
          二來,萬一項目中不需要使用jQuery呢,以后還得實現。

          三、總結體會

          在規定圓的大小的時候,使用了font-size屬性,而長度大小則基于font-size,也就是em為單位,這樣有一個好處,只要修改font-size的值,就可以改變圓的大小了,非常方便。

          另外,寫css的時候,盡可能將相同功能的代碼提取出來,將某個功能寫在一個{}中,起一個好名字,以后方便復用,bootstrap就是這么玩的,簡潔、易讀,通過classname基本就能知道標簽有哪些特性了。


          主站蜘蛛池模板: 麻豆精品人妻一区二区三区蜜桃| 久久人妻内射无码一区三区| 国偷自产一区二区免费视频| 影音先锋中文无码一区| 精品国产一区二区三区AV性色| 国产精品视频一区麻豆| 国产精品视频一区二区三区四 | 日韩精品一区二区三区中文版 | 日本一道高清一区二区三区| 无码精品人妻一区二区三区中| 天码av无码一区二区三区四区| 精品国产日韩亚洲一区91| 亚洲熟妇AV一区二区三区浪潮| 久久精品国产一区二区三| 一区二区视频传媒有限公司| 国产福利电影一区二区三区,日韩伦理电影在线福 | 内射少妇一区27P| 无码人妻啪啪一区二区| 国产91大片精品一区在线观看| 末成年女AV片一区二区| 日韩人妻不卡一区二区三区 | 国产视频一区在线播放| 亚洲AV无码一区二区三区鸳鸯影院| 亚洲一区二区免费视频| 亚洲一区二区三区免费观看| 精品无码国产一区二区三区AV | 视频精品一区二区三区| 日本精品一区二区三区在线视频| 国产主播一区二区三区在线观看| 国产婷婷色一区二区三区深爱网 | 国产一区二区四区在线观看| 日本高清成本人视频一区| 国产一区二区女内射| 亚洲AV无码一区东京热| 亚洲国产精品一区二区久| 亚洲av色香蕉一区二区三区| 美日韩一区二区三区| 日韩社区一区二区三区| 国产一区二区三精品久久久无广告 | 亚洲AV日韩AV一区二区三曲| 成人无号精品一区二区三区|