就在這樣不算濃郁的過年氣息中,更新第二篇每週一個前端動畫系列。
今天地鐵上人明顯少了很多,大家相視而笑,互相點頭示意但是眼神堅定。因為他們知道,只有共和國最優秀的人才,各部門最重要的崗位才會在這個時候出現在這個車廂裡.拖著行李箱的人羞愧的低下了頭,但是沒有人責怪他們,畢竟每個人的能力都是有限的,與其讓他們繼續工作,不如放他們回家過年。
本文分析實現的某些效果,僅僅作為一個思路分享,僅僅作為學習素材使用。
源動畫效果
結合上一篇的球隊logo的展示,在其下方放置了一個bar,用來展示球隊的支援率。這條支援率顯示bar可以點選,為球隊增加支援率。這個效果展示如下:
實現分析
經過觀察可發現:
- 動畫左右對稱,實現一邊即可
- 點選時支援率的變化是寬度的變化,兩方佔有的寬度是按照比例(支援人數/總人數)設定的,點選時該隊的支援人數和總人數同時改變
- 紅藍相連線的地方是一個斜角,這裡的實現可以用到
border-width
的一個技巧 - 點選是“+1”效果是一個放大動畫
分析完這些怎麼樣,是不是已經有思路了,來讓我們看程式碼。
程式碼實現
寬度改變效果
注意點選時候需要將支援數和總數同時加1,然後根據此數量修改支援率的寬度。
one.width(oneValue / allVote * 100 + "%");
other.width(100 - oneValue / allVote * 100 + "%");
複製程式碼
傾斜角的實現
傾斜角一般我們都是通過-webkit-transform:rotate(xxdeg)
實現,但是該方式在設定兩個不同顏色時候顯得不是那麼的方便。上面說到我們可以利用border-width
技巧實現這個傾斜角。當我們設定一個元素的width
,height
都為0的時候,我們設定的border-width
將進行佔位,該屬性設定的值將會平分該塊,假如將左右塊重複,效果可以展示為如下:
設定程式碼如下
.team-vs-bar .bar-a:after, .team-vs-bar .bar-b:after {
position: absolute;
display: block;
height: 0;
width: 0;
border-style: solid;
border-width: 20px;
border-color: transparent;
-webkit-transform: rotate(-15deg)
}
.team-vs-bar .bar-a:after {
border-top-color: #c93c5d;
right: -20px;
top: 0;
z-index: 1
}
.team-vs-bar .bar-b:after {
border-bottom-color: #306dca;
left: -20px;
bottom: 0
}
複製程式碼
“+1”動效的實現
繼續使用關鍵幀,可以進行如下的設定,注意每次點選時候需要將未完成的動畫清除掉,只顯示最後一次。
@-webkit-keyframes bar_plus {
0% {
opacity: 0;
-webkit-transform: scale(0)
}
50% {
opacity: 1
}
60% {
opacity: 1
}
100% {
opacity: 0;
-webkit-transform: scale(1.4)
}
}
複製程式碼
效果展示
關鍵點解讀
本文的關鍵點的實現除了“+1”動效,就是傾斜角的實現。“+1”動效依然可以使用關鍵幀實現,而傾斜角使用after
偽類以及border-width
的方法進行實現的方式希望可以給大家帶來新鮮的感覺。程式碼已上傳到github,歡迎提出Issues。
最後的慣例,貼上我的部落格,歡迎關注