2)ランキングコンポーネント
ランキングコンポーネントはCSS3 によるアニメーションをつけるために、少々トリッキーな作りとしていますが、仕組みはカレンダーコンポーネントと大して変わりません。
var OssList = ReactcreateClassvar _this = this;var ranks = {};thispropsdotPositionforEachranksposproductid =rank: i + 1color: poscolortop: i * 20;;return thispropsdotPositionmapvar oss = positionproduct;var style =position: 'absolute'color: ranksossidcolorwidth: '100%'transition: 'top 1s'top: ranksossidtop + 'px';if _thispropsselectedOssId === ossid stylebackgroundColor = '#f2dede';var label = ranksossidrank + '. ' + ossname;var url = "http://radar.oss.scsk.info/product/" + ossid + "/summary/" + _thispropsyearMonth;return <li ref=ossid key='oss-' + ossid style=style data-ossid=ossid><a href=url>label</a></li>;var listStyle =position: 'relative';return<div key="oss" className="list-container"><div key="oss-container" className="oss-container"><h3 key="oss-title">対象のOSS</h3><ul ref="listContainer" key="oss-list" className="oss-list" style=listStyle>this_lists</ul></div></div>;
render
メソッドではリストでOSSの一覧を配置しています。月やカテゴリが変わった時にアニメーションをするために、要素のpositionはabsoluteとしています。cssのtop
プロパティを変更すると、要素の出現順番を変えずに表示順番を変更することができます。top
の値はランキングの順位
*20px
で計算します。また、transition: top 1s
とし、top
の値が変わった時に1秒間かけて移動するアニメーションを実現しています。