如何繪制一個圓圓的loading圈

如何繪制一個圓圓的loading圈

小程序里需要一個像下面的loading,原生的沒有闰集,引入別的組件庫又太大沽讹,所有決定自己寫個愿汰。

1. 基本原理

分析一下波势,實現(xiàn)原理是首先畫出8個小圓圈曹动,然后用css3的動畫控制小圓圈的透明度變化少办。分別設(shè)置小圓圈動畫開始時間介劫,就可以實現(xiàn)了绳军。 按照這樣是思路實現(xiàn)的時候發(fā)現(xiàn)效果并不理想哄褒,首先是小圓圈的位置兴猩,其次是動畫延遲時間饲梭。俗話說授人予魚不如授人予漁乘盖。那就逐個探討一下其中技巧。

2. 定位設(shè)置

布局的實現(xiàn)原理是父元素設(shè)置為position: relative, 每個圓圈設(shè)置樣式為position: absolute; left: xx; top: xx; right: xx; bottom: xx憔涉。 通過給left/right/top/bottom設(shè)置不同的值將其均勻的分布在一個圓圈上订框。
html代碼如下:

<view class="q-loading-dot-warp">  
                <view class="dot dot1"></view>
                <view class="dot dot2"></view>
                <view class="dot dot3"></view>
                <view class="dot dot4"></view>
                <view class="dot dot5"></view>
                <view class="dot dot6"></view>
                <view class="dot dot7"></view>
                <view class="dot dot8"></view>
</view>

說起來簡單,但是給它們賦值的時候沒有經(jīng)驗兜叨,第一次用理科生的思維簡單將圓三等分計算坐標(biāo)穿扳,往往8個圓圈就圍成了一個菱形/正方形。国旷。矛物。就像下面這樣


1.jpg

3. 位置設(shè)置技巧

后來在簡書上看到 同學(xué)po的文章 css3實現(xiàn)18中l(wèi)oading效果, 按照J(rèn)Rd3的代碼確實可以實現(xiàn)很好看的效果跪但,但是當(dāng)我想換一換loading圓圈大小的時候履羞,樣式就崩了,經(jīng)過分析屡久,他們的坐標(biāo)是存在某種數(shù)學(xué)關(guān)系的忆首,如下圖所示,在豎直或橫線上的坐標(biāo)可通過50%定位被环,斜線上的坐標(biāo)如圖中所示糙及,其中w是矩形的寬高或者說是8個小圓圈所圍成的大園的半徑。
公式推導(dǎo)如下:

2.jpg

具體css代碼如下:

$width: 64px;
$height: 64px;
$dotWidth: 10px;
$dotHeight: 10px;
$radius: 5px;
$offset: 9.37px;

@function getLeft( $x ) {
  @return ($width/4)*$x;
}

@function getTop( $y ) {
  @return ($height/4)*$y;
}

@keyframes changeOpacity {
    from { opacity: 1; }
    to { opacity: .2; }
}

.q-loading {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    .q-loading-overlay { 
        position: fixed;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
        background-color: rgba(255, 255, 255, .5);  
    }
    .q-loading-content {
        position: absolute;
        left: 50%;
        top: 50%;
        transform: translate(-50%, -50%);
        width: $width;
        height: $height;
        z-index: 2;
    }
    .dot {
        width: 10px;
        height: 10px;
        position: absolute;
        background-color: #0033cc;
        border-radius: 50% 50%;
        opacity: 1;
        animation: changeOpacity 1.04s ease infinite;
    }
    .dot1 {
        left: 0;
        top: 50%;
        margin-top: -$radius;
        animation-delay: 0.13s;
    }
    .dot2 {
        left: $offset;
        top: $offset;
        animation-delay: 0.26s;
    }
    .dot3 {
        left: 50%;
        top: 0;
        margin-left: -$radius;
        animation-delay: 0.39s;
    }
    .dot4 {
        top: $offset;
        right: $offset;
        animation-delay: 0.52s;
    }
    .dot5 {
        right: 0;
        top: 50%;
        margin-top: -$radius;
        animation-delay: 0.65s;
    }
    .dot6 {
        right: $offset;
        bottom: $offset;
        animation-delay: 0.78s;
    }
    .dot7 {
        bottom: 0;
        left: 50%;
        margin-left: -$radius;
        animation-delay: 0.91s;
    }
    .dot8 {
        bottom: $offset;
        left: $offset;
        animation-delay: 1.04s;
    }
}

代碼使用scss定義了大圓和小圓圈的半徑蛤售,不管改成多大只需要更改變量丁鹉,下面樣式無需改變妒潭。
通過這個公式計算的看起來就很像圓形了


3.jpg

4. 動畫時間設(shè)置

假設(shè)動畫持續(xù)時間為 t, 圓圈個數(shù)為 c, 某個小圓圈的位置為 i (比如上面 i 取 1~8)揣钦,那么小圈相繼啟動的時間為 i * t/c

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末雳灾,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子冯凹,更是在濱河造成了極大的恐慌谎亩,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宇姚,死亡現(xiàn)場離奇詭異匈庭,居然都是意外死亡,警方通過查閱死者的電腦和手機浑劳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門阱持,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人魔熏,你說我怎么就攤上這事衷咽。” “怎么了蒜绽?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵镶骗,是天一觀的道長。 經(jīng)常有香客問我躲雅,道長鼎姊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任相赁,我火速辦了婚禮相寇,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘噪生。我一直安慰自己裆赵,他們只是感情好东囚,可當(dāng)我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布跺嗽。 她就那樣靜靜地躺著,像睡著了一般页藻。 火紅的嫁衣襯著肌膚如雪桨嫁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天份帐,我揣著相機與錄音璃吧,去河邊找鬼。 笑死废境,一個胖子當(dāng)著我的面吹牛畜挨,可吹牛的內(nèi)容都是我干的筒繁。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼巴元,長吁一口氣:“原來是場噩夢啊……” “哼毡咏!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起逮刨,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤呕缭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后修己,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體恢总,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年睬愤,在試婚紗的時候發(fā)現(xiàn)自己被綠了片仿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡尤辱,死狀恐怖滋戳,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情啥刻,我是刑警寧澤奸鸯,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站可帽,受9級特大地震影響娄涩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜映跟,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一蓄拣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧努隙,春花似錦球恤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至躬存,卻和暖如春张惹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背岭洲。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工宛逗, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人盾剩。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓雷激,卻偏偏與公主長得像替蔬,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子屎暇,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,486評論 2 348