亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

使用React Native制作圓形加載條

xiongzenghui / 1171人閱讀

摘要:前端常規(guī)制作進(jìn)度條方法前端實(shí)現(xiàn)相對(duì)容易點(diǎn),我們可以用去繪制圓,也可以用去繪制使用主要是用進(jìn)行繪制,關(guān)于使用可以看這里。

先放運(yùn)行截圖說明做什么吧,

react-native-percentage-circle 項(xiàng)目地址

最近需求需要一個(gè)顯示百分比的加載條。然而去搜索了很久,沒能發(fā)現(xiàn)比較滿意的組件,只好自己解決了。當(dāng)然對(duì)于大多數(shù)前端而言,這個(gè)并不是特別難的,可能思路眾多,然而面對(duì)React Native似乎就有點(diǎn)相形見絀了。解決這樣的問題,我們還是得回歸前端本身,看看有什么可以嫁接的方案沒。

前端常規(guī)制作進(jìn)度條方法

前端實(shí)現(xiàn)相對(duì)容易點(diǎn),我們可以用canvas去繪制圓,也可以用SVG去繪制.

使用SVG

    
    
 
 

SVG主要是用Circle進(jìn)行繪制,關(guān)于Circle使用可以看 這里 。我們先繪制第一個(gè)圓,用于底色。接下來我們只需要在上面繪制一個(gè)帶有色彩的圓(切記不要填充顏色fill="none")。這個(gè)時(shí)候我們需要了解兩個(gè)關(guān)鍵的屬性;

stroke-dasharray: 用于控制路徑繪制中虛線和間距的。例子中的即圓的周長(zhǎng)。

stroke-dashoffset: 用于指定距離虛線繪制的起點(diǎn)

如果我們知道了這個(gè)的話,我們只需要計(jì)算出圓的周長(zhǎng)

var CircleLength = R * 2 * Math.PI;

var PercentOffset = - CircleLength * yourPercent;

然后將這個(gè)第二個(gè)Circle屬性賦予到style中:

style="stroke-dashoffset: -93.9336; stroke-dasharray: 375.734;"

SVG相對(duì)來說還算是比較易用的解決方案, Demo;

使用 CSS漸變

還有一個(gè)更加直接的方法,就是利用 CSS3 中的linear-gradient

效果如圖:

我們只需要指定line-grdient中通過旋轉(zhuǎn)的角度然后設(shè)置好間隔的漸變百分比就行啦。

background-image:linear-gradient(90deg, transparent 50%, #16a085 50%),     linear-gradient(90deg, #eee 50%, transparent 50%);

下圖為隱藏掉遮擋的小圓的樣子。

代碼如下:

.circle1{
  position:relative;
  width:110px;
  height:110px;
  border-radius:100%;
  background-color: #eee;
  background-image:linear-gradient(90deg, transparent 50%, #16a085 50%),     linear-gradient(90deg, #eee 50%, transparent 50%);
 }
.circle2{
  position:relative;
  top:5px;
  left:5px;
  width:100px;
  height:100px;
  border-radius:100%;
  background-color: #fff;
}

DEMO

使用CSS Transform

如果要用Transform 的話,這個(gè)腦洞就比較大了,解決的方案也有很多,今天自己分享一個(gè)相對(duì)不燒腦的解決方案:

圖3-1


圖3-2

如圖 我們需要建立一個(gè)外部的圓,也就是用于繪制灰色的底色,然后再用一個(gè)區(qū)域進(jìn)行層級(jí)遮擋(也可以自己用border來模擬啦)。記住屬性一定要有overflow:hidden.

接下來我們需要添加左右兩個(gè)分區(qū),用于放置進(jìn)行彩條繪制的容器。如圖3-1我們?cè)O(shè)置左分區(qū)一個(gè),里面是一個(gè)左半圓,而這個(gè)半圓距離容器距離是100%,默認(rèn)是不可見的。然后它需要圍繞圓心旋轉(zhuǎn),比較巧妙的是,它需要旋轉(zhuǎn)過180度后,才會(huì)回到它的父容器可見區(qū)域。如圖3-2同理我們可以設(shè)置右半?yún)^(qū),然后將半圓放在-100%的距離,即右半圓默認(rèn)也不可見的。當(dāng)它開始旋轉(zhuǎn)的時(shí)候即如下圖紅色區(qū)域就是我們的角度:

注意由于是兩個(gè)圓進(jìn)行配合,因此角度過180度,時(shí)候,左半圓則開始旋轉(zhuǎn),而右半圓則保持180度即可。

.left-wrap{
    overflow: hidden;
    position: absolute;
    left:0;
    top:0;
    width: 50%;
    height:100%;
    
}
.left-wrap .loader{
    position: absolute;
    left:100%;
    top:0;
    width:100%;
    height:100%;
    border-radius: 1000px;
    background-color: #333; 
    border-top-left-radius: 0;
    border-bottom-left-radius: 0;
    transform-origin:0 50% 0;
}
// 省略一些右半?yún)^(qū)代碼

.right-wrap{
    ....
    left:50%;
}
.right-wrap .loader{ 
    ...
    left:-100%;
    border-bottom-right-radius: 0;
    border-top-right-radius: 0;    
    transform-origin:100% 50% 0;    
}

DEMO

這些就是前端的一些解決方法當(dāng)然你也可以選擇開源的框架,比如:

CSS percentage circle built with jQuery

progressbar.js

Pure CSS percentage circle

如何使用React Native寫這樣的進(jìn)度條呢?

前面的前端思路自己倒是有了,于是覺得很easy嘛,不過在開始寫的時(shí)候發(fā)現(xiàn) 尷尬了。 SVG成本比較大,你需要安裝依賴react-native-art-svg。用漸變的話,當(dāng)然也比較麻煩,也需呀安裝依賴,自己內(nèi)心覺得:畫一個(gè)圓至于么?。?!

于是乎開始自己造輪子了,采用了第三種方案,就用view + transform進(jìn)行組件封裝。才開始還挺順的,不過看官方文檔,發(fā)現(xiàn)沒有對(duì) transform origin支持。雖然支持了rotate ,scale,translate,但是發(fā)現(xiàn)這個(gè)缺陷,無疑陷入一絲困境。隨后發(fā)現(xiàn)有人早已提了自己的pr給官方,希望得到支持。類似于 transformOrgin:{x:100}這樣子。 當(dāng)然目前最新版依舊沒有納入到計(jì)劃中。不過官方支持了transformMatrix , 這個(gè)雖好,可是樓主數(shù)學(xué)卻是渣,能不能有一個(gè)讓學(xué)渣快速理解的方案。

The transform-origin property lets you modify the origin for transformations of an element. For example, the transform-origin of the rotate() function is the centre of rotation. (This property is applied by first translating the element by the negated value of the property, then applying the element"s transform, then translating by the property value.)

大致意思就是這個(gè)屬性在進(jìn)行選擇時(shí)指定origin的時(shí)候,會(huì)先將元素平移過去,然后再移回來。所以我們可以在旋轉(zhuǎn)時(shí)這樣指定:


 

這樣自己就可以解決transform origin的問題了。這樣寫進(jìn)度就非常easy 啦。自己簡(jiǎn)單封裝了這個(gè)組件 react-native-percentage-circle

簡(jiǎn)單開始:

npm i react-native-percentage-circle --save
import PercentageCircle from "react-native-percentage-circle";

//...

redner() {
  
      
  
}

選項(xiàng)說明

Props Type Example Description
color string "#000" 進(jìn)度條顏色
percent Number 30 百分之多少
radius Number 20 圓的半徑

當(dāng)然目前的參數(shù)自己想到的就這些,當(dāng)然大家可以自己寫,也可以提PR ,將它擴(kuò)展。

文章同步博客 : http://www.jackpu.com/shi-yon...

參考

stroke-dasharray MDN

linear-gradient MDN

理解CSS3 transform中的Matrix(矩陣)

The CSS3 matrix() Transform for the Mathematically Challenged

React Native Transforms

transform-origin support

transform-origin

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/80170.html

相關(guān)文章

  • React Native 圓形進(jìn)度組件

    摘要:演示動(dòng)畫安裝方法需要手動(dòng)下,用打開項(xiàng)目,添加到中,然后在中添加。暫時(shí)沒找到原因。完整示例完整代碼圓形進(jìn)度條組件本次示例代碼在文件夾中。組件地址微信不讓跳轉(zhuǎn)外鏈,可以點(diǎn)擊查看原文來查看外鏈內(nèi)容。 本文原創(chuàng)首發(fā)于公眾號(hào):ReactNative開發(fā)圈,轉(zhuǎn)載需注明出處。 React Native 圓形進(jìn)度條組件:react-native-circular-progress,圓形的進(jìn)度條組件,支...

    XiNGRZ 評(píng)論0 收藏0
  • React Native 常用的 15 個(gè)庫(kù)

    摘要:聲明式用法只需使用動(dòng)畫的名稱,該動(dòng)畫將在加載該元素時(shí)立即生效。實(shí)際案例這個(gè)庫(kù)支持本地推送通知功能比較全面。實(shí)際案例具有縮放支持,回調(diào),縮放以適應(yīng)和滾動(dòng)指示器支持的組件。這是圖像上傳或圖像處理的基本庫(kù)。 本篇 React native 庫(kù)列表不是從網(wǎng)上隨便找的, 這些是我在我的應(yīng)用中親自使用的庫(kù)。 這些庫(kù)功能可能跟其它庫(kù)也有,但經(jīng)過大量研究并在我的程序中嘗試后,我選擇了這些庫(kù)。 想閱讀更...

    Juven 評(píng)論0 收藏0
  • React Native 開發(fā)小Tips

    摘要:除此之外,部分頁(yè)面,其實(shí)完全可以由網(wǎng)頁(yè)去支持多端共用的功能,樓主親身遇到過的場(chǎng)景,就是圖表的繪制,我們的方案是一個(gè)頁(yè)面,需要微信,手機(jī)網(wǎng)頁(yè),和都具備該功能,而且我們手機(jī)網(wǎng)頁(yè)和客戶端打開的稍微有區(qū)別,需要隱藏。 showImg(https://segmentfault.com/img/bVzxDW); 相信好多寫React Native的都是前端出身,當(dāng)然遇見問題的,也很多時(shí)候會(huì)想從前端...

    kevin 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<